<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>brushupmylife</title>
        <link>https://velog.io/</link>
        <description>내 인생 그려 보기</description>
        <lastBuildDate>Mon, 27 Nov 2023 12:03:12 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>brushupmylife</title>
            <url>https://velog.velcdn.com/images/viper_se/profile/05e6f195-97ee-4c30-845b-543ead98b217/image.gif</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. brushupmylife. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/viper_se" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Java Collection - List]]></title>
            <link>https://velog.io/@viper_se/Java-Collection-List</link>
            <guid>https://velog.io/@viper_se/Java-Collection-List</guid>
            <pubDate>Mon, 27 Nov 2023 12:03:12 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/viper_se/post/f411d046-f048-4d66-bb88-1322ef1d7c0c/image.jpg" alt=""></p>
<p>프로젝트 한창 할 때는 정말 웹을 위한 개발을 하느라... Collection을 제대로 사용하지 못했더니 혹시라도 잊었을까 봐 복기 겸 정리를 하려고 마음 먹음</p>
<hr>

<h2 id="collection이란">Collection이란?</h2>
<ul>
<li>자바에서 제공하는 자료구조를 담당하는 <strong>프레임워크</strong></li>
<li>java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들이 포함</li>
<li>컬렉션을 사용하면 데이터 추가, 삭제, 정렬 등의 처리가 간단하게 해결되어 자료구조적 알고리즘을 구현할 필요가 없다는 장점</li>
<li>List, Set, Vector, Stack, Queue, Map, Properties가 해당</li>
</ul>
<h3 id="list">List</h3>
<ul>
<li>중복 허용</li>
<li>순서 있음</li>
</ul>
<pre><code class="language-java">ArrayList&lt;Vo&gt; list = new ArrayList&lt;&gt;();</code></pre>
<p>**&lt;&gt; **</p>
<ul>
<li>제네릭스(Generics), 컴파일 시 타입을 체크해 주는 기능</li>
<li>명시된 타입의 객체만 저장하도록 제한을 두기 위해 사용<br>

</li>
</ul>
<p><strong>활용되는 기본 메서드 정리</strong></p>
<pre><code class="language-java">// 1. add(E e) 리스트 끝에 추가
list.add(new Vo(1, 2));

// 2. add(int index, E, e) : 인덱스를 지정하여 해당 인덱스에 추가
list.add(1, new Vo(1, 2));

// 3. set(int index, E, e) : 해당 인덱스의 값을 변경
list.set(1, new Vo(3, 4));

// 4. size() : 리스트 안에 몇 개의 데이터가 있는지 (리스트 길이)
list.size();

// 5. remove(int index) : 해당 인덱스의 객체 삭제
list.remove(0);

// 6. get(int index) : 해당 인덱스로 객체 가져오기
list.get(0);

// 7. subList(int index1, int index2) : 추출해서 새로운 List로 반환
list.subList(0, 1);

// 8. addAll(Collection c) : 컬렉션을 통째로 뒤에 추가하는 메소드
list.addAll(sub);

// 9. isEmpty() : 컬렉션이 비어있는지 묻는 메소드
list.isEmpty(); // true or false

// 10. clear() : 전부 비우기
list.clear();

// 11. 오름차순 정렬
Collections.sort(list);

// 12. 내림차순 정렬
Collections.reverse(list);

// 13. clone() : 리스트 복제
list.clone();</code></pre>
<p><strong>배열과 List 상호 변환</strong></p>
<ul>
<li>배열 -&gt; List<pre><code class="language-java">String[] arr = {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;};
</code></pre>
</li>
</ul>
<p>// list 값의 추가나 변경 없이 사용할 경우
List<String> list1 = Arrays.asList(arr); 
List<String> list2 = new ArraysList&lt;&gt;(Arrays.asList(arr));
// stream에서 지원
List<String> list3 = Stream.of(arr).collect(Collectors.toList);</p>
<pre><code>
list1처럼 배열을 변경하여 사용할 경우 add나 remove 같은 메소드를 사용하려면 Exception이 발생하기 때문에 list2와 같이 변경해서 사용해야 한다.

- List  -&gt; 배열
```java
ArrayList&lt;String&gt; list = new ArrayList&lt;String&gt;();

int arrSize = list.size();

// String 배열일 경우
String[] arr1 = list.toArray(new String[arrSize]);

// int 배열일 경우
int[] arr2 = new int[arrSize];
for(int i=0; i&lt;arrSize; i++) {
    arr2[i] = Integer.parseInt(list.get(i));
}

int[] arr3 = list.stream().mapToInt(i -&gt; i).toArray();

int[] arr4 = list.stream().mapToInt(Integer::intValue).toArray();
</code></pre><p>반복문으로 값을 넣는 방법이 보통 정석이 되는데, 나는 stream을 배우고 나서부터 stream으로 변경한 뒤 mapToInt 메소드를 통해 정수 배열에 넣어 주는 방법을 사용하고 있다. <del>반복문 사용하면 로직이 너무 길어진다...</del></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Could not create the java virtual machine 에러 해결]]></title>
            <link>https://velog.io/@viper_se/Spring-Could-not-create-the-java-virtual-machine-%EC%97%90%EB%9F%AC</link>
            <guid>https://velog.io/@viper_se/Spring-Could-not-create-the-java-virtual-machine-%EC%97%90%EB%9F%AC</guid>
            <pubDate>Thu, 24 Aug 2023 13:51:09 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/viper_se/post/e706826c-0863-4002-8ddc-e34a8f6b09f3/image.png" alt=""></p>
<p>오늘 spring을 설치하면서 저 오류를 총 두 개의 장치에서 봤다. 하나는 데스크탑이고, 하나는 내 노트북인데... 어쩜 두 개 다 이런가 싶어 어이없고 답답했다.</p>
<p>아무튼 이 글을 검색해서 들어왔다면 나와 같은 고통을 겪을 것인데, 나는 정보가 너무 없어서 시간이 오래 걸렸다 <del>그래서 백업 겸 정보를 주고자...</del> </p>
<p>해결 방법에는 여러 가지가 있다.</p>
<p>일단 두 가지의 분기점으로 나뉘는데</p>
<blockquote>
</blockquote>
<p>➡️ <a href="#init-%EC%88%98%EC%A0%95%ED%96%88%EB%8B%A4">init 수정했다</a>
➡️ <a href="#init-%EC%88%98%EC%A0%95-%EC%95%88-%ED%96%88%EB%8B%A4">init 수정 안 했다</a></p>
<hr>

<h2 id="init-수정했다">init 수정했다</h2>
<p>수정을 했다면 <strong>-vm에 javaw.exe</strong> 경로를 추가했을 것이다. 다운받은 Spring 자체에 문제가 있는지 확인해야 하니 추가한 경로를 지우고 STS.exe를 실행해 보자. </p>
<p style="color: lightgray">지웠는데도 안 된다면 밑에 수정 안 했다를 먼저 읽자.</p>

<p>정상적으로 실행이 된다면 파일을 종료하고 init에 다시 경로를 추가해 본 뒤, 
exe를 실행하고 could not create the java virtual machine 오류 뒤에 나오는 긴 오류문을 유심히 읽어 보자. 
-vm 다음에 있는 경로가 DB 관련 path로 지정되어 있을 확률이 높다.</p>
<p><code>시스템 속성 -&gt; 고급 -&gt; 환경 변수 -&gt; 시스템 변수 -&gt; path -&gt; 편집</code></p>
<p>JAVAHOME이 아닌 다른 path가 맨위에 올라와 있다면 JAVAHOME을 맨위로 올려 줘야 한다. 
init이 path를 읽지 못한 것이다. 바꿔 주고 저장하고 다시 STS.exe를 실행하면 정상적으로 돌아간다.</p>
<p>그러나, 이래도 안 된다고 한다면 cmd를 켜서 java -version을 확인하자. 
이때 java -version이 아무것도 뜨지 않는다면 java가 여러 버전 깔려 있을 확률이 높기 때문에 제어판에 가서 사용하지 않는 버전은 삭제하고 다시 확인한다. </p>
<p>아마 대부분 환경 변수나 자바 버전 이슈 내에서 해결이 될 것이니 위 방법으로도 해결이 안 된다면 시스템 변수 쪽을 유심히 보길 바란다. (난 참고로 시스템 변수 쪽 JAVAHOME 경로가 jdk20으로 되어있었다... 11 쓰는데)</p>
<hr>

<h2 id="init-수정-안-했다">init 수정 안 했다</h2>
<p>이 경우는 솔직하게 말하자면</p>
<ol>
<li>파일 자체가 이미 상한 경우. 다운로드부터 다시 받고 압축 풀 때 경고창이 뜨면 다시 받기.</li>
<li>컴퓨터가 심하게 좋지 않은 경우. 그런데 spring도 안 돌아가는 컴퓨터는 거의 없을 것이다.</li>
<li>데이터가 버거운 경우. STS.init 파일을 실행하면 <code>Xms256m Xmx=2048m</code> 라고 되어 있는 부분이 있는데 Xmx 쪽을 512m 정도로 바꿔서 다시 실행해 보자.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[230801 coding test 연습 기록]]></title>
            <link>https://velog.io/@viper_se/230801-coding-test-%EC%97%B0%EC%8A%B5-%EA%B8%B0%EB%A1%9D</link>
            <guid>https://velog.io/@viper_se/230801-coding-test-%EC%97%B0%EC%8A%B5-%EA%B8%B0%EB%A1%9D</guid>
            <pubDate>Tue, 01 Aug 2023 13:48:33 GMT</pubDate>
            <description><![CDATA[<h2 id="프로그래머스---숫자-문자열과-영단어">프로그래머스 - 숫자 문자열과 영단어</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/81301">https://school.programmers.co.kr/learn/courses/30/lessons/81301</a></p>
<p>카카오 문제라는 걸 보고 혹해서 들어감. 난이도는 그리 높지 않았고 오늘 기준으로 정답률 69%인데... 더 올라갈 것이라고 예상함.</p>
<p>우선 매개변수로 String 타입 변수  s 한 개를 줬고 답은 int 타입 answer로 반환하는 것이 조건이었다.</p>
<p>문제를 간단히 설명하자면 <code>0부터 9까지의 숫자 영단어(ex. one, two)가 숫자와 무작위로 섞인 문자열이 주어지는데, 문자열을 전부 숫자로 바꿔 하나의 정수가 되게 하여 반환해 주면 된다.</code></p>
<p>그리고 제한사항 확인</p>
<ul>
<li>1 ≤ s의 길이 ≤ 50</li>
<li>s가 &quot;zero&quot; 또는 &quot;0&quot;으로 시작하는 경우는 주어지지 않습니다.</li>
<li>return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.</li>
</ul>
<p>딱히 까다로운 부분은 없었다. 우선 영단어들을 담아 줄 String 배열을 하나 만들어 줬고, 0부터 9까지의 숫자만 문자열 형식으로 담긴 String 배열도 하나 만들었다. </p>
<pre><code class="language-java">String[] sArr = {&quot;zero&quot;, &quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;, &quot;eight&quot;, &quot;nine&quot;};
String[] numArr = {&quot;0&quot;, &quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;, &quot;7&quot;, &quot;8&quot;, &quot;9&quot;};</code></pre>
<p>for문으로 반복문 조건에 sArr 배열의 길이를 넣고 문자열 s에 contains 메소드를 찍어 s에 sArr의 요소가 포함되어 있다면 실행을 하는 if문을 걸어 줬다. 실행 부분에는 replace 메소드로 sArr 요소를 numArr 요소로 바꿔 문자열 s가 전부 숫자로만 이루어지게 만들었다.</p>
<p>문제에서는 int 타입으로 반환하기를 원했으니, 문자열 s를 정수로 바꿔서 return 해 주기만 하면 간단하게 해결할 수 있다.</p>
<pre><code class="language-java">    public int solution(String s) {
        int answer = 0; 
        String[] sArr = {&quot;zero&quot;, &quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;, &quot;eight&quot;, &quot;nine&quot;};
        String[] numArr = {&quot;0&quot;, &quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;, &quot;7&quot;, &quot;8&quot;, &quot;9&quot;};

        for(int i=0; i&lt;sArr.length; i++) {

            if(s.contains(sArr[i])) {
                s = s.replace(sArr[i], numArr[i]);
            } 
        }

        answer = Integer.parseInt(s);

        return answer;
    }
}</code></pre>
<p>또, 이 코테 문제는 테스트 제한 시간이 10초였기 때문에 코드가 길면 테스트의 시간이 오래 걸림. 최대한 간단하게 만들어야 한다.</p>
<p>결과는 쉽게 통과했으나, 역시 다른 사람들의 코드를 보고 나니 코테 문제는 스트림이 최고라고 다시 생각하게 된다...</p>
<p>요즘 javascript를 신경 쓰느라 머리에서 혼동이 되어 정리하려고 코테 공부를 하는데... 역시나 스트림을 제일 먼저 잊어버린 듯 싶다. 다시 공부해서 스트림 많이 써 봐야지... 시간 단축에 완전 효율적인 듯</p>
<h2 id="프로그래머스---없는-숫자-더하기">프로그래머스 - 없는 숫자 더하기</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/86051">https://school.programmers.co.kr/learn/courses/30/lessons/86051</a></p>
<p>이번에는 제목이 끌려서 풀어 보았다. 정답률은 84%로 딱 그 만큼 정도의 난이도라고 생각한다.</p>
<p>기본적으로 사용해야 할 매개변수는 int 타입의 배열 numbers와 리턴 변수 int 타입 변수 answer이다.</p>
<p><code>int타입의 배열이 중복 없이 0~9까지의 자연수로 주어진다. 이 배열에서 없는 숫자들의 합을 구해서 리턴한다.</code> 는 짧은 요약의 문제이다.</p>
<p>기본 코테 문제인 것 같다. 여러 가지 방법이 있을 텐데... 가장 먼저 생각난 건 역시 배열인 것 같다... 튜닝의 끝은 역시 순정이라고 그냥 배열을 사용해서 0부터 9까지 담았다.</p>
<pre><code class="language-java">int[] n = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};</code></pre>
<p>for문을 이중으로 걸어서 바깥 for문에는 numbers를 돌리고 안쪽에는 n을 돌렸다. numbers와 n 요소가 같다면 numbers에 n의 index에 해당하는 숫자가 존재하는 것이기 때문에 n의 index 요소에 0을 대입한다. </p>
<p>바깥 for문까지 전부 돌아가면 실행되지 않은 요소를 제외한 요소들은 0이 되기 때문에 숫자가 존재하는 요소들만 전부 더해서 answer에 넣어 주면 해결 완료다.</p>
<pre><code class="language-java">class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        int[] n = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

        for(int i=0; i&lt;numbers.length; i++) {
            for(int j=0; j&lt;n.length; j++) {
                if(numbers[i]==n[j]) {
                    n[j] = 0;
                }
            }
        }

        for(int i=0; i&lt;n.length; i++) {
            answer += n[i];
        }

        return answer;
    }    
}</code></pre>
<p>뭐랄까 할 수 있는 방법이 많아서 더 생각하느라 첫 번째 문제보다 오래 걸렸던 것 같다. 이것도 스트림으로 해결 가능할 듯</p>
<p>내일부터 스트림 복습 다시 간다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[230727 coding test 연습 기록]]></title>
            <link>https://velog.io/@viper_se/230727-coding-test-%EC%97%B0%EC%8A%B5-%EA%B8%B0%EB%A1%9D</link>
            <guid>https://velog.io/@viper_se/230727-coding-test-%EC%97%B0%EC%8A%B5-%EA%B8%B0%EB%A1%9D</guid>
            <pubDate>Thu, 27 Jul 2023 14:52:06 GMT</pubDate>
            <description><![CDATA[<h5 style='color : lightgray'>기록용 문서</h5>

<h3 id="프로그래머스---부족한-금액-계산하기">프로그래머스 - &#39;부족한 금액 계산하기&#39;</h3>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/82612">https://school.programmers.co.kr/learn/courses/30/lessons/82612</a></p>
<p>정답률도 낮지 않고, 레벨도 1이지만 입문 만큼 간단해 보여 호기롭게 작성했다.</p>
<p>기본으로 제공해 주는 코드에는 int 형의 변수 세 개를 매개변수로 지정해 줬고, 반환되는 변수의 타입은 long형이었다. 여기서 의아해졌다.</p>
<pre><code class="language-java">class Solution {
    public long solution(int price, int money, int count) {
        long answer = -1;

        return answer;
    }
}</code></pre>
<p>그리고 문제를 다시 읽어 봤다. 간략히 설명하자면 <code>한 놀이기구를 처음 타는 데에 드는 돈은 price원, 해당 놀이기구의 탑승 횟수가 늘어날 수록 비용은 탑승 횟수인 count 만큼 배가 된다. 가지고 온 돈이 money라고 했을 때 놀이기구에 내야 하는 총 금액보다 money가 크거나 같을 경우에는 answer에 0을 반환하면 되고, 아닐 경우에는 부족한 금액을 answer에 반환한다.</code></p>
<p>다 읽고 든 생각... 금방 하겠는데?</p>
<p>그러나 이것은 오만이었다... 처음에는 막힘 없이 풀었던 게 사실이었으므로... 얼마 지나지 않아 테스트하고, 테스트 케이스 몇 개 추가해서 통과해 해당 코드로 제출하기를 눌렀음</p>
<pre><code class="language-java">class Solution {
    public long solution(int price, int money, int count) {
        long answer = 0;
        int sumPrice = 0;

        for(int i=0; i&lt;=count; i++) {
            sumPrice += price * i;
        }        

        if(money &gt;= sumPrice) return answer = 0; 
        else return answer = sumPrice - money;
    }
}</code></pre>
<p>근데 수많은 파란불들 사이에... 빨간불이 5개나 보이는 거다.</p>
<p>테스트 케이스를 5개나 추가했는데 죄다 통과했기에 대체 뭐가 문제인지 골머리를 앓던 중이었는데 그때 눈에 띄었던 것은</p>
<pre><code>&lt;제한사항&gt;

놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수</code></pre><p>제한사항은 평소에 테스트해 볼 때만 참고했던 터라 이번에도 그렇겠지 하고 넘겼는데 유난히 저 많은 0이 눈에 띄었다... 그리고 아까 의아해졌던 게 생각남.</p>
<p>answer를 long으로 줬었지... 어쩐지 왤케 크게 주나 했다.</p>
<p>테스트를 셋 다 제한사항 맥스로 해 보았다. 아니나 다를까 분명 else문이 실행됐을 텐데 0이 담겼다! int형 범위를 초과했던 것이다...</p>
<pre><code class="language-java">class Solution {
    public long solution(int price, int money, int count) {
        long answer = 0;
        long sumPrice = 0;

        for(int i=0; i&lt;=count; i++) {
            sumPrice += price * i;
        }        

        if(money &gt;= sumPrice) return answer = 0; 
        else return answer = sumPrice - money;
    }
}</code></pre>
<p>바로 <strong>long</strong>으로 바꿔 줬다. 채점하기 누른 결과 통과함... 알던 걸 실수한다는 게 이렇게 허탈할 줄이야... 다시는 이런 실수 금지다.</p>
<p>&lt;정리&gt;</p>
<ul>
<li>int형 값의 범위 :  -2147483648 ~ 2147483647</li>
<li>long형 값의 범위 : -9223372036854775808 ~ 9223372036854775807</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[ip 바뀌었을 때  oracle listener 오류 해결 방법]]></title>
            <link>https://velog.io/@viper_se/ip-%EB%B0%94%EB%80%8C%EC%97%88%EC%9D%84-%EB%95%8C-oracle-listener-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@viper_se/ip-%EB%B0%94%EB%80%8C%EC%97%88%EC%9D%84-%EB%95%8C-oracle-listener-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Fri, 14 Jul 2023 14:01:18 GMT</pubDate>
            <description><![CDATA[<h5 style="color:lightgray">기록용 문서</h5>

<h2 id="🔴-발단">🔴 발단</h2>
<p>유동 아이피인 경우 ip가 자주 바뀌는데 이때, sql-d를 실행하면 속도가 굉장히 느려지며 만들어 놓은 계정에 접속이 안 됨.</p>
<p>실패가 뜨면서</p>
<pre><code>IO오류: The Network Adapter could not establish the connection</code></pre><p>라는 접속 오류를 볼 수 있을 텐데 아무리 봐도 건든 게 없고 전이랑 바뀐 게 없다면... 당장 ip를 확인해 보자.</p>
<pre><code>cmd &gt; ipconfig </code></pre><p>ip를 확인하니 ip가 변경된 것을 확인할 수 있었다. 이때 억지로 리스너를 다시 키려고 실행하면</p>
<pre><code>oraclexetnslistener 서비스가 로컬 컴퓨터에서 시작했다가 중지되었습니다</code></pre><p>이런 오류를 만날 수 있을 것이다. 당연히 리스너 실행 안 됨.</p>
<h2 id="🔵-해결방법">🔵 해결방법</h2>
<p>oracle을 설치해 둔 파일 경로로 들어간 후 </p>
<pre><code>network &gt; admin</code></pre><p>해당 경로로 이동하면 <code>listener.ora</code>와 <code>tnsnames.ora</code> 파일이 있는 것을 확인할 수 있다. 두 파일 모두 메모장으로 열어 준 뒤 <code>HOST</code>부분을 수정해 준다.</p>
<pre><code>HOST = 컴퓨터장치이름 or 새로바뀐아이피 or localhost</code></pre><p>참고로 새로 바뀐 ip를 입력해 두는 건 추천하지 않는다. 바뀔 때마다 매번 이 귀찮은 작업을 해 줘야 함...</p>
<p>두 파일 모두 수정 후 서비스에서 listener를 재시작하면 정상적으로 실행될 것이다.</p>
<p>이러고 다 됐다며 sql-d 실행하면 아무것도 해결되지 않으니 무조건 재부팅하길 바란다. 그럼 정상적으로 계정 접속이 될 것임.</p>
<h5 style="color:gray">ps. 접속 들어가서 호스트 이름 바꿔 주는 거 잊지 말길</h5>]]></description>
        </item>
    </channel>
</rss>