Проектиране на мебели в Blender 3D – ръководство и видео урок

RENDERED етажерка
Ще се опитам да напиша един урок за просто проектиране, моделиране и програмиране на мебели в Blender. Програмата поддържа езика за програмиране Python, който разполага с безкрайни възможност за създаване и управление на обекти. Ще се постарая да се изразявам максимално простичко и ясно.

Необходими инструменти:
1. Молив
2. Лист хартия
3. Blender 3D – по възможност версия 2.67 или по-нова

Първо да скицираме някакъв по-простичък обект (мебел), който искаме да проектираме. Аз ще създам проста етажерка за окачване на стена. За да улесня максимално процеса, моята етажерка ще е от 4 детайла – 2 еднакви по размер страници + 2 една по размер елемента, които ще са гръб и под. Ето как изглежда моята етажерка:
Схема на етажерка
Сега е време да се сблъскаме с назъбения интерфейс на моделера Blender. Програмата е малко плашеща за нови потребители. Но има голямо комюнити и много уроци, които помагат за овладяването и. Лично аз много харесвам тази програма и използвам предимно базовите и фукнции, които често ми олесняват живота. Нека да започнем със забавата.
Стартираме програмата и натискаме Delete бутона от клавиатурата, за да изтрием куба, който се зарежда под дефолт.
Blender 3D interface
Старайте се да не кликате никъде с мишката, докато не разберете каква е логиката на програмата. Кликовете с мишока са:
– Левия клик поставя 3Д-курсора в точката на кликане
– десния клик върху обект го селектира
– Скролирането в 3D фрейма зумва
– Натиснат среден бутон върти 3Д-фрейма
– среден бутон + задържан Shift мести 3Д-фрейма

Има и доста допълнителни команди, но за тях по-късно.

Сега, докато не сме почнали с експериментите, нека разгледаме координатната система. Намира се долу в ляво:
Blender координатна система
Сега да помислим как да си разположим елементите от нашата етажерка:
Проектиране на етажерка
Важно е да се отбележи, че ще използваме метричната система. Това трябва да му го кажем на Blender, иначе ще прави глупости. За целта правим следните настройки:
Елементите, които трябва да създадем в 3Д са:
– 2 броя страници: 18x240x222mm
– 2 броя плоскости за гръб и под: 850x222x18mm
Тези елементи по-късно ще ги добавим в нашия програмен код. Размерите на всеки елемент могат да се групират в масив. Примерно такъв:
stranici=[0.018, 0.240, 0.222]
gryb=[0.850, 0.222, 0.018]
dyno=[0.850, 0.018, 0.222]

Можем да ги създадем по поне 10 начина, но аз ще ви покажа един много нестандартен подход, който често се оказва най-оптимален и бърз вариант. Ще използвам много просто програмиране на Python. За целта трябва да отворим редактора за въвеждане на Python скриптове. Това също може да стане по много начини, но аз ще използвам предефинираните полета на Blender:
Кликнете бутона Choose Screen layout и изберете Scripting
Blender scripting
Кликнете на бутона +New
Blender new script
!!! Супер важно: Старайте се курсора на мишката винаги да е във фрейма в който работите. Примерно, ако искате да въвеждате текст в текстовия редактор, курсора ви трябва да е в този прозорец (фрейм).
В текстовия редактор пейстнете следния код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import bpy
 
strani=[0.018, 0.240, 0.222]
gryb=[0.850, 0.222, 0.018]
dyno=[0.850, 0.018, 0.222]
 
# създаваме 2-те страници. Те лежат в едно направление
# и можем да използваме цикъл
for x in range(2): # изпълни 2 пъти
    bpy.ops.mesh.primitive_cube_add(radius=1)
    bpy.context.object.dimensions=strani
 
# създаваме гръб
bpy.ops.mesh.primitive_cube_add(radius=1)
bpy.context.object.dimensions=gryb
 
# създаваме пода
bpy.ops.mesh.primitive_cube_add(radius=1)
bpy.context.object.dimensions=dyno

Прозореца със скрипта трябва да изглежда така:
Blender Python script
Командите:

1
2
bpy.ops.mesh.primitive_cube_add
bpy.context.object.dimensions

са въведени в API-интерфейса на Blender. Всяка версия на програмата има документация в която са описани всички команди, които могат да се изпълняват от програмата. Как лесно да разберем коя команда как се ползва ще опиша някой друг път.

Сега трябва да изпълним кода. Натискаме Text->Run Script:
Blender run script
От тук насетне следва местене и рендване в Blender. Действията, които съм извършил в програмата, могат да се видят в по-долното видео:
[flv:https://blog.nediko.info/examples/blender/Etajerka_tutorial.flv https://blog.nediko.info/examples/blender/Etajerka_tutorial.jpg 584 316]

Share and Enjoy !

Shares

Vim Editor – Видео урок

Преди доста време бях правил видео за редактора Vim. Направих го за мен, а и заради едни приятели от форум, който посещавах.
Скоро ми се наложи пак да ползвам Vim editor на едно Linux дистро и бях малко като пате в кълчища. За това качвам урока, та другият път да изкарам един бърз курс, ако ми се наложи.

[flv:https://blog.nediko.info/examples/vim_editor/Vim_Tutorial.flv https://blog.nediko.info/examples/vim_editor/Vim_Tutorial.jpg 584 403]

Share and Enjoy !

Shares

PHP рекурсивно обхождане на дървовидна база данни

Много често се налага да се работи с дървовидни бази данни. С тях могат да се изграждат структури с дъщерни елементи, като например дървовидни менюта за сайт с категория, подкатегория, секция.
Ето едно примерно обхождане на подобна база данни с рекурсия:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
$arr = array(
    // $id, $parent_id, $name
    array(1, 0, "edno"),
    array(2, 0, "dve"),
    array(3, 1, "edno-edno"),
    array(4, 3, "edno-edno-edno"),
    array(5, 1, "edno-dve"),
    array(6, 2, "dve-edno"),
    array(6, 1, "edno-tri")
);
 
function recurse($arr, $pid, $space = '') {
    $output = '<ul>';
 
    foreach ($arr as $key => $ar) {
 
        if ($ar[1] == $pid) {
 
            $output .= "<li>" . $ar[2] . "\n";
            // iztrivane na obhodenite elementi
            $pid_temp = $ar[0];
            unset($arr[$key]);
 
            if ($children = recurse($arr, $pid_temp, $space . '_')) {
                if ($children != '<ul></ul>')
                    $output .= $children;
            }
            $output .= "</li>";
        }
    }
 
    return $output . "</ul>";
}
 
echo recurse($arr, 0, '');

В резултат се получи една чудесна списъчна структура:
Дървовидно обхождане с рекурсия

Share and Enjoy !

Shares

Netbeans дебъгване на PHP-код с Xdebug

Не знам защо до сега не съм използвал възможностите за дебъгване на PHP. Може би от глупост, щото едва ли не ми се е налагало. Е, да но вече като знам, че е добре да се дебъгва, едва ли ще пропусна да използвам тази благинка.
Нямам по-читав редактор за PHP, освен портабъл версия на Netbeans 7.4. Няма инсталирана и чиста Java (необходима, за да работи IDE-то), за това ще използвам портабъл версия – OpenJDKPortable_7_Update_9_b02_Development_Test_1.paf.exe.
Портабъл версиите понякога се държат много идиотски. А защо не използвам инсталатори е една друга тема. И за да работи всичко както трябва се наложи да направя простотията да инсталирам 3-те “инструмента” в следните директории:
NetBeans 7.4: C:\installed\soft\NetBeans_PHP_7.4_Portable
OpenJDK 7: C:\installed\soft\CommonFiles\java
PHP 5.4.23: C:\installed\soft\php

След стартиране на NetBeans, видях, че всичко е наред, само дето не му работеше дебъгването. Това се оправя по следния начин:
1. Download на php_xdebug-2.2.5-5.4-vc9-nts.dll от тук
2. Записва се в директорията: C:\installed\soft\php\ext
3. Редактира се файла php.ini, като в края му се добавя:
zend_extension='C:\installed\soft\php\ext\php_xdebug-2.2.5-5.4-vc9-nts.dll'
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000

И почва да се пие бира и да се дебъгва неистово.

Share and Enjoy !

Shares

Бюджетен компютър – собственоръчно сглобен

Дойде време да си ъпдейтвам настолното PC. Направо си му беше време за разкарване и реших да инвестирам някой лев в ново. Четох доста за последните процесори на AMD серия Kaveri и ме впечатлиха като цена и възможности. Затова се спрях се на AMD-базирана машина. Процесорите Kaveri са с интегрирана видео карта Radeon R5 или Radeon R7. Което означава, че използват споделена RAM, което пък означава, че трябва да се изнвестира в по-бърза рам, за да върви всичко нормално. Освен, ако не се добави външна видео карта.
Спрях се на процесора AMD A8-7600 – с 4 CPU-ядра и 6 GPU-ядра. Подробно ревю на процесора A8-7600. Направих един рисърч, от къде мога да го получа и се оказа, че по нашите ширини липсва подобен процесор. За това се насочих към английските магазини. От доста време използвам услугите на куриери, като Gabieli, които срещу 2 лв/кг ми доставят в махалата всичко, което си харесам от UK-магазините. Та процесора си го взех за 59.41 паунда от тук:
AMD A-Series A8-7600 with AMD Radeon R7 Graphics
AMD Kaveri A8-7600 - Amzon
От четене на разни бенчмаркове харесах много и дъната на MSI. И какво беше разочарованието ми, когато се оказа, че и така дъна не се предлагат в милата ни родина. Та отново направих поръчка на братчедите в Amazon.co.uk. И покрай поръчката на дъното доуснах грешката, да си поръчам и евтина RAM, но за това после. Та си поръчах това дъно за 37.93 паунда:
MSI A78M-E45 AMD FM2+ A78 Micro-ATX Motherboard
Плюс тази kit RAM за 63.00 паунда:
G-Skill 8GB Ripjaws X DDR3 2133 Dual Kit – Red
Хора, не си поръчвайте тази рам!!! Никога!!!
Рама и дъното ми легнаха 100.93 паунда, което си е доста прилична цена, ако изключим ядовете с паметта:
MSI A78M-E45 and G-Skill 8GB Ripjaws X DDR3 2133
След като направих тези поръчки имах време внимателно да се поогледам за останалите комйпоненти.
Захранване, кутия и DVD-писчка си харесах в eMag:
Cooler Master G500, 500W, ATX 2.3, PFC activ
Кутия DeLux ME879, Middletower, без захранващ блок
DVD записвачка Asus DRW-24F1ST/BLK/B/AS, SATA
Трите неща ми излязоха 179 лв:
PSU, Case, DVD - от eMag.bg
За да е съвременна една машина, то задължително трябва да има SSD-диск. Това беше и един от критериите ми, за да избера по-горната кутия – DeLux ME879. Продуктите от eMag дойдоха точно за 24 часа. Имах кутия с шейничка за SSD, оставаше да си набавя и SSD. След кратко търсене се спрях на Crucial MX100 128Gb, намерих го в erabg.com за 140лв:
SSD 128GB 2.5-inch SSD Crucial MX100 – 36 месеца гаранция
Междувременно пристигнаха дъното, рамта и процесора. Заделих си един петък-вечер за сглобяването.
Кутията DeLux ME879 ме изненада особено приятно. Стабилна кутия с USB3-вход отпред, страхотен дизайн, системен вентилатор отзад, дебела ламарина, шейничка за SSD, всякакви необходими винтчета и кабелчета. Малко картинки на кутията:
DeLux ME879

DeLux ME879

DeLux ME879

DeLux ME879

DeLux ME879

DeLux ME879

Процесора дойде в много скапана опаковка, дори не си направих труда да я снимам. За сметка на това дойде с BOX-охладител намазан с термо-паста.
Ето и снимки на процесора AMD Kaveri A8-7600:
AMD Kaveri A8-7600

AMD Kaveri A8-7600

AMD Kaveri A8-7600

Дъното е от най-евтините на MSI, но за сметка на това си личи, че доста са се постарали, да направят едно наистина конкурентно дъно. Базирано на чипсета на AMD – А78. докато търсех дъна за Kaveri, видях, че това е едно от най-продаваните дъна за този модел процесори и не съм имал колебания в избора. По-голямата ми чуденка е, защо нашите магазини не предлагат продукти на MSI? Малко снимки:
MSI A78m-E45

MSI A78m-E45

MSI A78m-E45

MSI A78m-E45

MSI A78m-E45

MSI A78m-E45

MSI A78m-E45

Ram-та G-Skill 8GB Ripjaws X DDR3 2133 Dual Kit – Не купувайте тази рам!!!!
IMGP3795

SSD диска Crucial MX100 128Gb. Приятен бонус към SSD-то беше регистрацията за програмата Acronis True Image 2014:
SSD Crucial MX100 128Gb

SSD Crucial MX100 128Gb

Cooler Master G500, 500W, ATX 2.3, PFC activ:
Cooler Master G500, 500W, ATX 2.3, PFC activ

След сглобяването на всичко това, започнаха инсталациите на Win7 и Ubuntu. Естествено направих и някои тестове на хардуера, при което ми се изправи косата! Паметта се дънеше ужасно, правеше грешки при елементарни операции, като инсталиране на програми и браузване. Резултатите от memtest86+ бяха трагични:
G-Skill 8GB Ripjaws X DDR3 2133 Dual Kit – Memtest Errors

В момента тази рам пътува обратно към Amazon. Дано всичко мине наред и си възвърна кинтите (върнаха ги и бяха изключително коректни). След това разочарование тръгнах по нашите магазини, за да си купя рам от тук с гаранция. Проверих в Jarcomputers в Пловдив и се оказа, че нямат никаква налична рам CL9 на 1600Mhz или CL9/11 2133Mhz. Вакуум! От там газ до erabg.com, където си намерих:
RAM KIT 2x4GB1600 Kingston HyperX Blue – genesis
Сега вече машината се чувства идеално, а с нея и аз. На моменти усещам, че боксовия вентилатор иска да избяга пищейки от ужас, но ще изчака до следващата заплата, когато ще си купя нещо доста по-читаво, което да даде истинска прохлада на процесора. Като го взема и инсталирам, ще пиша, за да не ми мине котка път.
—–
Дойде времето да драсна и за охлаждането. Купих си DeepCool GAMMAXX S40 отново от erabg.com. Охлаждането ми понижи температурата на процесора саредно с 10-15°C спрямо боксовия охладител. Много прилично захранване на чудесна цена – 46лв.
DeepCool GAMMAXX S40

DeepCool GAMMAXX S40

Share and Enjoy !

Shares

Как работи домашния хладилник – схема

С тази проста анимирана схема ще се опитам да обясня работата на домашния хладилник:
схема на домашен хладилник
Компоненти на домашният хладилник:

  • Компресор
  • Кондензатор (втечнител)
  • Филтър
  • Изпарител
  • Дроселиращ елемент (капилярна тръба)
  • Хладилен шкаф
  • Хладилен агент (фреон)

Как работи хладилникът? Компресора нагнетява фреона, който на този етап е газ и го изпраща в кондензатора. Там, заради високото налягане, започва втечняването на фреона. Течния фреон постъпва във филтъра, който още се нарича и филтър-дехидратор. Филтъра пречиства хладилния агент (фреона) от механични замърсявания и от остатъчна влага. Филтъра обикновено е пълен с влагоабсорбиращ материал, най-често това е силикагел. След почистването фреона постъпва в капилярната тръба (капилярка). Капилярката служи да отдели системата на ниско и високо налягане. Капилярната тръба действа като дюза. При преминаването на фреона през нея се получава пад на налягането и температурата. От капилярната тръба фреона постъпва в тромпета на изпарителя, където става впръскването. В тази точка започва бурното кипене и изпаряване на хладилния агент, при което кипене се отнема топлината от вътрешния обем на хладилния шкаф. След изпарителя повечето хладилен агент се е превърнал в пара и по пътя до компресора се изсушава до сух газ.

Правилното функциониране на домашния хладилник зависи от множество детайли:

  • Подходящ компресор
  • Подходящ регулатор (електронен или механичен термостат)
  • Точно определяне на количеството хладилен агент
  • Липса на пречупвания по тръбния път
  • Липса на пропуски и утечки
  • Достатъчна изолация на хладилния шкаф
  • Подсигуряване охлаждането на кондензатора
  • Липса на обемни заледявания по изпарителя

Съвремените домашни хладилници работят на цикли, които осигуряват саморазскрежаването на хладилната част. Фреизерната част също може да се саморазмразява, ако е оборудвана с саморазмразяващ се изпарител и е осигурен канал за оттичане на водата.
Регулирането на домашния хладилник е сложна тема и може да бъде реализирано по доста различни начини. Ще разгледам просто регулиране с термостат. За целта ще си помогна с проста схема, показваща електрическите връзки:
Домашен хладилник - електрическа схема
При включване на хладилника в мрежата, термостата затваря веригата и компресора стартира. Това е така, докато температурата в обема на хладилния шкаф не падне до точката на изключване на термостата. След което термостата прекъсва веригата. Когато температурата в обема се вдигне, термостата отново затваря веригата и компресора отново започва да работи.
Механичните термостати са прости и надеждни устройства, които имат работен живот десетки години. Осезателя на механичния термостат представлява тръбичка с метален балон в тялото на термостата. Тръбичката и балона са пълни с газ, който свива и разширява обема си спрямо околната температура. Когато температурата е висока, балона на термостата се раздува и докосва двете точки, които затварят веригата. Постигането на различни температури се осъществява посредством винт, който доближава или раздалечава точките на включване спрямо балона.
При електронните термостати управлението става с термоелементи, които променят съпротивлението си спрямо температурата. Идеята е същата.
Осветлението в хладилника се включва, когато вратата се отвори. За целта около рамката на хладилния шкаф е монтиран шалтер с пружина, който при затворена врата прекъсва веригата. Има и други методи за следене на отворена/затворена врата, като например рийд-ампула и магнит.

————
Ще добавя няколко думи относно двукръговите хладилници с 2 отделения, които позволяват изключване на някое от отделенията и ползване само на другото. Преди години производителите правеха двукръгови хладилници с 2 компресора. Така потребителите имаха избор да изключат или само хладилното отделение, или само фризерното. Естествено тези хладилници бяха скъпи, тъй като най-скъпия компонент в хладилника е компресора (всъщност не винаги е така). За да се редуцира цената и пак да се предостави на потребителя избор за пестене на енергия, производителите се насочиха към едно по-рационално решение с един компресор. Неодостатък на това решение е, че позволява изключване само на хладилната част, като остава да работи само фризера. Подобно схема се реализира с управление с магнет-вентил, който насочва фреона или към целия кръг, или само към фризерната част. Ето опростен изглед на схема на двукръгов хладилник с един компресор:
Комбиниран двукръгов хладилник с един компресор - схема
В този случай едно от предизвикателствата е прецизното определяне на количеството фреон, за да не се получи презапълване на хладилната инсталация, когато хладилника работи само на фризерен режим. Или пък системата да остане недозаредена, когато работи в режим на цял цикъл. Това затруднение може да се редуцира леко, ако се използва събирател (изсушител, ресивер) на фреон непосредствено след фризерния изпарител или просто се пусне по-дълга смукателна тръба в запенената част. Това ще позволи леко презареждане на системата за фризерен режим, като недоизпарения фреон ще се изпари по пътя до компресора.
Схемата на управление се реализира най-често с електроника, но съм виждал много хитър вариант и с механични термостати.

Share and Enjoy !

Shares

Jason Derulo dance steps

Дъщеря ми много си пада по бай Jason Derulo. Накара ме да и кача песните му таблета и всеки ден го гледа. Сега ме накара, да и изрежа от клиповете стъпките на hip-hop-а му… е, нямах избор :).
Опитах се да мина тънко, като пусна търсения за jason derulo dance steps, обаче нищо конкретно не намерих. Затова си поиграх и направих това кратко видео. Дано да и е достатъчно, щото почнах и аз да повтарям Wiggle, wiggle 🙂

[flv:https://blog.nediko.info/examples/jason_derulo/Jason_Derulo-Dance_steps.flv https://blog.nediko.info/examples/jason_derulo/jason_derulo.jpg 580 397]

Лично мен ме кефи парчето Trumpets и на пасажите с “get undress” го увеличавам малко, та барем булката се сети. Не че хваща дикиш, ам песента си ме радва.
За създаване на видеото използвах ffmpeg.

Share and Enjoy !

Shares

Арапя – 2014

Gallery

This gallery contains 52 photos.

Скоро бяхме на къмпинг Арапя за няколко дни. Не бях ходил там повече от 15 години. Арапя е променена, но все още е запазила дивия си дух. Вечер по плажа могат да се чуят песни, китари, тарамбуки и какви ли … Continue reading

Ицо Хазарта с ново видео за модерния български рап и политика, Местан – тъпанар

С огромно удоволствие изслушах последното парче на Хазарта. Шокиращо добре е уловил духа на държавата България в средатана на 2014-та година.
Парчето, като цяло е осмиващо чалгата – в политиката, в музиката, в бизнеса, в псевдо-студентския живот. На пръв поглед лекия текст със силен диалект е изпълнен с метафори и препратки, които хвърлят в дълбок размисъл. На първо слушане, през цялото време имах усещането за дежа-вю. Има връзка със старите парчета на Ъпсурт от албума “Боздуган” от края на 90-те години. Тъпото в цялата история е, че България с бясна сила върви към времената на битаците и борцата, а простотията и русофилията гонят зад граница и малкото останали с мозък в главата. Има силен бъзик с кинтите от въртележката, които ги прибира мутрата – олицетворение на бизнеса в държавата.
А на края… е края е просто разкошен с неадекватното изказване на оня бивш СДС-ар и сегашен ДПС-ар – Местан, по повод назначаването на Делян Пеевски за шеф на ДАНС.
Mestan-DPS-SDS
Местан откровено е наречен тъпанар, което споделят голяма част от малкото нормалните хора в тая държава. Браво на Хазарта, за смелостта, да казва нещата с истинските им имена! Това е истинския смисъл на рапа – да се казват истините в очите на политиците и властимащите тъпанари. С тенденцията с която намаляваме, като работещо население, скоро тая държава ще се превърне в държава на пенсионери и местановци.
Култово парче, което за съжаление малко хора ще го разберат. Но пък Хазарта никога не е бил комерс. Diss-овете му са насочени към специална публика с по-различно мислене от на овчата тълпа.

Ице, да си жив и здрав!

Share and Enjoy !

Shares

Kayfun Lite + Kayfun Nano Kit – в търсене на нирваната

Днес ми остана да си поиграя с няколко кита за електронни цигари, които си купих наскоро. Близо от половин година изпарявам с Kayfun v3.1 ES. Много ми харесват възможностите, които ми дава изпарителя, като настройки. Да не говорим, че парата е студена точно толкова, колкото я обичам. Само един кусур има – прекалено е голям. За това си поръчах по-малкия събрат Kayfun Lite и Kayfun Nano Body Kit (това са три адаптера, които намалят височината на почти всички Kayfun-и).
Бях си поръчал и Ni-Cr (нихром реотан) 0.32mm – идеалния размер за механични модове. Взех го Gigadrinks. Набримчих 6 намотки и започнах да си кадя. Е, голям кеф!
Получи се това симпатично нещо:
Kayfun Lite and Nano Kit
Прилагам картинки, които показват, колко е голям оригиналния Kayfun 3.1 ES:
Kayfun 3.1 ES vs Kayfun Lite + Nano Kit
Kayfun 3.1 ES vs Kayfun Lite + Nano Kit
Естествено, както всички хубави неща, не случват от първият път. Наложи са да вкарам малка модификация, защото при завиване на комина на Nano-то устройството даваше на късо. Просто комина е с много дълга резба и опираше в намотката. А аз намотката обичам да я пускам поне 1.5-2 mm над отвора за влизане на въздух в камерата. За целта взех О-пръстенчето от мундщука на оригиналния Kayfun и го сложих на комина на Nano-то. Говоря за това:
O-ring Kayfun Nano Kit
Междувременно си намерих много симпатичен малък керамичен черен мундщук.
Ceramic Shorty 510 Drip Tip
Просто заспа!
Сега се сещам, че имам и адаптер за Chi You мода, който съм ползвал, който ми позволява да ползвам батерии 18500. Следващата стъпка ще е да се сдобия с такива батерии.

Всичко, което съм използвал:
SvoeMesto Kayfun v3.1 ES Styled
Kayfun Lite Styled Rebuildable Atomizer
Kayfun Nano Body Kit
Ceramic Shorty 510 Drip Tip
Chi You Style Mechanical Mod

Share and Enjoy !

Shares