Здравствуйте, друзья! В прошлом году я сделал первый круглендарь. Продолжаем, экспериментируем.
Идея проекта — создать календарь, позволяющий увидеть все дни года, вспомнить приятные моменты прошлого и ожидаемые события будущего. Есть Google.ru/search?q=round+calendar&newwindow=1&tbm=isch&tbo=u&source=univ&sa=X&ei=OafyUqLnAuWvyAOwrYGoAw&ved=0CCUQsAQ&biw=1920&bih=936">куча аналогов, особенностью этого проета является минималистичность и пустота, ведь на первом плане должны быть каракули обладателя.
• Скачиваем с Github (или git clone github.com/illus0r/kruglendar2014.git) • Распечатываем на формате А1 • Вешаем на стенку в удобном месте (особенно хорошо — в туалете), рядом — фломастер на ниточке. • Случилось что-то интересное? Лихо дорисовываем круглендарь! К концу года будет любо-дорого смотреть.
Также, как и предыдущий, этот календарь публикуется под лицензией Creative Commons «Attribution» («Атрибуция») 3.0 Непортированной.
С Новым Годом!
Под катом немного о процессе создания.
Процесс
В этом году всё началось с набросков. Думал сделать что-то навороченное и фрактальное, с лунным календарём в довесок. Но вернулся к первому минималистичному эскизу.
Как заправский лентяй, я решил написать скрипт, который выполнить львиную долю работы. Так появилась возможность поиграть размерами, толщинами и, конечно же, шрифтами.
Сперва задавал радиусы и толщины окружностей вручную, но потом решил, что будет гораздо естественнее и приятнее, если они определяться геометрической прогрессией.
Над цветами долго не думал. В фотошопе, открыл окошко выбора цвета и переключился в режим с одинаковой Lightness цветовой схемы Lab (она учитывает восприятие цвета человеком и интенсивность цветов будет схожей).
Несколько точек есть, остальные получаем путём интерполяции. Хорошо, я выбрал не самый простой путь, и можно было обойтись маской в иллюстраторе. Но ведь так веселее!
# -*- coding: utf-8 -*-
import svgwrite, math, numpy
def frange(x, y, jump):
while x < y:
yield x
x += jump
if __name__ == '__main__':
# Calendar parameters
textAngleShift = -(0.26*math.pi*2/365)
canvasSize = (500,707)
mid = canvasSize[0]/2.0, canvasSize[1]/2.0
dayFontFamily = "PT Sans"
dayFontSize = "1.8pt"
svgFileName = 'calendar_03.svg'
# we will interpolate rainbow gradient through these points
rainbowGradient = [[ 0, 0, 0,239,255,255, 0, 0], # Red
[254,248,246,194, 0, 0,211,254], # Green
[255,193, 0, 0, 0,210,255,255]] # Blue
rainbowGradientPoints = [math.pi*2/7*0,
math.pi*2/7*1,
math.pi*2/7*2,
math.pi*2/7*3,
math.pi*2/7*4,
math.pi*2/7*5,
math.pi*2/7*6,
math.pi*2/7*7
]
#=======================================
# Calendar circle parameters
#=======================================
k = 3.0 # multiplication koef.
delta = 1.9 # first step in progression
initRad = canvasSize[0]*0.3684 # initial size
radiusProgression = [initRad]
for i in range(4):
nextValue = initRad-delta*pow(k,i)
radiusProgression += [nextValue]
R_dates = 1.2*canvasSize[0]*0.312
R_days_end,
R_days_beg,
R_weeks_beg,
R_mounthes_beg,
R_seasons_beg = radiusProgression
#R_weekend_end = R_days_beg + 20;
R_weekend_end = R_days_end;
# Stroke width
stroke_k = 1.8
stroke_thinest = 0.15
dayLineStrokeWidth,
weekLineStrokeWidth,
mounthLineStrokeWidth,
seasonLineStrokeWidth = [0.1*(stroke_k**i) for i in range(4,0,-1)]
weekendStrokeWidth = 6.7
#=======================================
# Filling mounth arrays
#=======================================
dayAngle = math.pi*2/365
weekAngle = dayAngle*7
mounthes = [u'января',
u'февраля',
u'марта',
u'апреля',
u'мая',
u'июня',
u'июля',
u'августа',
u'сентября',
u'октября',
u'ноября',
u'декабря'
]
mounthDays = [31,28,31,30,31,30,31,31,30,31,30,31] # days in each mounth
yearDays = ["%d %s"%(i+1, mounthes[index])
for index, m in enumerate(mounthDays)
for i in range(m)]
# array with marks for yearDays:
# 1 means first day of mounth
# 2 means first day of mounth and of season
allFirstDates = [ 0 if i!=0 else
1 if (index+1)%3!=0 else
2
for index, m in enumerate(mounthDays)
for i in range(m)]
mounthAngles = [d*dayAngle for d in mounthDays]
#=======================================
# Making svg and groups
#=======================================
dwg = svgwrite.Drawing(svgFileName, profile='tiny')
textGroup = dwg.g(font_family=dayFontFamily,
font_size=dayFontSize,
text_anchor="start" )
dayLineGroup = dwg.g(stroke_width=dayLineStrokeWidth, fill='none')
weekLineGroup = dwg.g(stroke_width=weekLineStrokeWidth, fill='none')
mounthLineGroup = dwg.g(stroke_width=mounthLineStrokeWidth, fill='none')
seasonLineGroup = dwg.g(stroke_width=seasonLineStrokeWidth, fill='none')
weekendGroup = dwg.g(stroke_width=weekendStrokeWidth, fill='none')
#=======================================
# Drawing in defined groups
#=======================================
for index, angle in enumerate(frange(0,math.pi*2,dayAngle)):
# interpolation will help us to find
# all necessary segments for every segment of circles
colorTuple = (int(numpy.interp(angle, rainbowGradientPoints,
rainbowGradient[0])),
int(numpy.interp(angle, rainbowGradientPoints,
rainbowGradient[1])),
int(numpy.interp(angle, rainbowGradientPoints,
rainbowGradient[2])))
color = "rgb%s"%(str(colorTuple))
sinus = math.sin(angle)
cosinus = math.cos(angle)
# Draw a week segment
if (index-5)%7 == 0:
weekLineGroup.add (dwg.line( (mid[0]-R_weeks_beg*sinus,
mid[1]+R_weeks_beg*cosinus),
(mid[0]-R_days_beg *sinus,mid[1]+R_days_beg *cosinus),
stroke=color) )
# Draw a weekend
sinus_weekend = math.sin(angle-dayAngle)
cosinus_weekend = math.cos(angle-dayAngle)
weekendGroup.add (dwg.line( (mid[0]-R_days_beg*sinus_weekend,
mid[1]+R_days_beg*cosinus_weekend),
(mid[0]-R_weekend_end *sinus_weekend,mid[1]+R_weekend_end *
cosinus_weekend),
stroke=color) )
#if (index-)
weekLineGroup.add (dwg.line( (mid[0]-R_weeks_beg*sinus,
mid[1]+R_weeks_beg*cosinus),
(mid[0]-R_days_beg *sinus,mid[1]+R_days_beg *cosinus),
stroke=color) )
# Draw a mounth+season segments
if allFirstDates[index]!=0:
mounthLineGroup.add (dwg.line( (mid[0]-R_mounthes_beg*sinus,mid[1]+
R_mounthes_beg*cosinus),
(mid[0]-R_weeks_beg *sinus,mid[1]+R_weeks_beg*cosinus),
stroke=color) )
# Draw a season segments
if allFirstDates[index]==2:
seasonLineGroup.add (dwg.line( (mid[0]-R_seasons_beg*sinus,mid[1]+
R_seasons_beg*cosinus),
(mid[0]-R_mounthes_beg *sinus,mid[1]+R_mounthes_beg*cosinus),
stroke=color) )
# Draw a day segments
dayLineGroup.add (dwg.line( (mid[0]-R_days_beg*sinus,mid[1]+
R_days_beg*cosinus),
(mid[0]-R_days_end *sinus,mid[1]+R_days_end *cosinus),
stroke=color
) )
# Draw a day name
if (index-4)%7 == 0 or (index-3)%7 == 0:
fillColor = color #"rgb(255,255,255)"
#fontWeight = "bold"
weekendMargin = 2.0
else:
fillColor = "rgb(0,0,0)"
#fontWeight = "normal"
weekendMargin = 0
wordGroup = dwg.g(transform="rotate(%f, %f, %f) translate(%f,0)"
%( math.degrees(angle+dayAngle+textAngleShift)+90,
mid[0], mid[1], +R_dates+weekendMargin )
)
wordGroup.add( dwg.text( '%s'%(yearDays[index]),
insert=mid, fill=fillColor
#,style="font-weight: %s;"%(fontWeight)
))
textGroup.add(wordGroup)
#=======================================
# Dray a circle segments
#=======================================
sinus_end = math.sin(angle+dayAngle)
cosinus_end = math.cos(angle+dayAngle)
dayLineGroup.add( dwg.line( (mid[0]-R_days_beg*sinus,
mid[1]+R_days_beg*cosinus),
(mid[0]-R_days_beg*sinus_end,mid[1]+R_days_beg*cosinus_end),
stroke=color ) )
weekLineGroup.add( dwg.line((mid[0]-R_weeks_beg*sinus,
mid[1]+R_weeks_beg*cosinus),
(mid[0]-R_weeks_beg*sinus_end,mid[1]+R_weeks_beg*cosinus_end),
stroke=color ) )
mounthLineGroup.add( dwg.line((mid[0]-R_mounthes_beg*sinus,
mid[1]+R_mounthes_beg*cosinus),
(mid[0]-R_mounthes_beg*sinus_end,mid[1]+R_mounthes_beg*cosinus_end),
stroke=color ) )
seasonLineGroup.add( dwg.line((mid[0]-R_seasons_beg*sinus,
mid[1]+R_seasons_beg*cosinus),
(mid[0]-R_seasons_beg*sinus_end,mid[1]+R_seasons_beg*cosinus_end),
stroke=color ) )
#=======================================
# Simple circles for quick testing
#=======================================
#dayLineGroup.add( dwg.circle(center=mid, r=R_days_end, stroke='black' ) )
#dayLineGroup.add( dwg.circle(center=mid, r=R_days_beg, stroke='black' ) )
#weekLineGroup.add( dwg.circle(center=mid, r=R_weeks_beg, stroke='black' ) )
#mounthLineGroup.add( dwg.circle(center=mid, r=R_mounthes_beg, stroke='black' ) )
#seasonLineGroup.add( dwg.circle(center=mid, r=R_seasons_beg, stroke='black') )
dwg.add(dayLineGroup)
dwg.add(weekLineGroup)
dwg.add(mounthLineGroup)
dwg.add(seasonLineGroup)
dwg.add(weekendGroup)
dwg.add(textGroup)
# As I didn't learn how to set document width and height, just draw a rect
dwg.add(dwg.rect((0, 0), canvasSize, stroke='gray', fill="none"))
dwg.add(dwg.text("2014", insert=(mid[0],mid[1]+4),
text_anchor="middle", font_family="PT Serif", font_size="10pt"))
#=======================================
# Finaly, draw it!
#=======================================
dwg.save()
На выходе получаем такой вот SVG файл, который остаётся слегка доработать напильником в Иллюстраторе. А именно, увеличить документ до размеров А1, поправить кернинг числа 2014, увеличить апроши в мелких надписях, добавить внизу подпись.
Оп-ля! Круглендарь готов. Делаем группу в контакте для получения обратной связи, пишем ридми для Гитхаба и статью на Хабр.
Всем спасибо за внимание, буду рад вашим комментариям.
| Круг, Новый Год сверху | |
| Круг, Новый Год снизу | |
| Круг, Новый Год справа | |
| Круг, Новый Год слева | |
| Спираль, Новый Год сверху | |
| Спираль, Новый Год снизу | |
| Спираль, Новый Год справа | |
| Спираль, Новый Год слева | |
| Другое (напишу в комментариях) |
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Проголосовало 178 человек. Воздержался 31 человек.
| По часовой стрелке | |
| Против часовой стрелки |
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Проголосовало 93 человека. Воздержалось 10 человек.
Источник: http://habrahabr.ru/post/209550/
Другие новости по теме:
Новости по теме
TAG Heuer тоже выпустит умные часы с начинкой Intel7 декабря 2014 г., 2:04:24Компания TAG Heuer, известная своими элитными наручными часами, все-таки решилась на выпуск полноценных смарт-часов под своим бредом, и представит она их уже в январе, вероятнее всего, на CES 2015. Эта выставка пройдет в первых числах следующего... |
Карты для Apple будут создавать пользователи iPhone и iPad7 декабря 2014 г., 1:52:30Пока Google планомерно наращивает функциональность приложения Google Maps, компания из Купертино занимается доведением до ума собственного картографического сервиса, вызвавшего массу нареканий и даже заставившего главу Apple Тима Кука публично... |
XOLO выпустила два доступных смартфона из серии Omega7 декабря 2014 г., 1:33:42XOLO выпустила два доступных смартфона из серии Omega. Компания XOLO запускает в индийскую розницу два новых бюджетных смартфона — Omega 5.0 и Omega 5.5. Сайт Zauba.com, который следит за индийским импортом и экспортом, уже не раз раскрывал... |
ZTE клонировала новый «Айфон» и выпустила смартфон Q77 декабря 2014 г., 1:25:35Китайские компании, научившиеся делать качественные смартфоны, все никак не забудут, что еще несколько лет назад они промышляли кражей дизайна мобильников у крупных компаний. Привычка — вторая натура, вот и компания ZTE не смогла справиться с ней... |
TAG Heuer тоже выпустит умные часы с начинкой Intel7 декабря 2014 г., 1:24:39Компания TAG Heuer, известная своими элитными наручными часами, все-таки решилась на выпуск полноценных смарт-часов под своим бредом, и представит она их уже в январе, вероятнее всего, на CES 2015. Эта выставка пройдет в первых числах следующего... |
Motorola готовит мощный фаблет с 4 ГБ оперативной памяти6 декабря 2014 г., 20:19:074 ГБ RAM и Snapdragon 810 в новом флагмане Motorola. Несколько недель назад Motorola представила на рынок Google Nexus 6. По всей вероятности, Motorola всерьёз намерена «завалить» рынок смартфонов топовыми устройствами. Похоже, что Motorola... |
Sony может запустить телевизоры на Android TV уже в феврале6 декабря 2014 г., 19:54:36Некоторое время назад японская Sony объявила, что вся линейка ее «умных» телевизоров 2015 года выпуска с дисплеями форматов HD и 4K будет поставляться с предустановленной Android TV. Официальных подробностей по этому поводу мало, но интернет-ресурс... |
Новый смартфон teXet X46 декабря 2014 г., 19:06:55teXet X4 представляет собой новое поколение устройств с точки зрения дизайна корпуса, он значительно тоньше (всего 7,6 мм) большинства моделей бюджетного сегмента. Корпус teXet X4 радует глаз лаконичным дизайном, плавностью линий, минимальными... |
Sony может запустить телевизоры на Android TV уже в феврале6 декабря 2014 г., 19:03:15Некоторое время назад японская Sony объявила, что вся линейка ее «умных» телевизоров 2015 года выпуска с дисплеями форматов HD и 4K будет поставляться с предустановленной Android TV. Официальных подробностей по этому поводу мало, но интернет-ресурс... |
Samsung: Android 5.0 для Galaxy S4, Note 4 и Note 3 - в начале 2015 года6 декабря 2014 г., 7:01:07Android 5.0 Lollipop - одно из самых жарких обновлений системы, поэтому владельцы многочисленных мобильных устройств уже с нетерпением ждут своих порций леденцов. Только вчера мы написали о начале распространения Android 5.0 для Galaxy S5, как... |
Android 5.0.1 стал доступен для GPe-версий HTC One M8 и M76 декабря 2014 г., 7:01:02Владельцы смартфонов HTC могут радоваться, первая партия обновлений Lollipop уже в пути. Как и было обещано, компания выпустила пакет последней версии Android для GPe-версий One (M8) и One (М7). Однако, похоже, что HTC дотянул устройства сразу... |
Samsung Galaxy S5 начинает получать обновление Android 5.0 Lollipop6 декабря 2014 г., 6:30:04Samsung всех нас удивил, когда начал выпускать обновление Android 5.0 Lollipop для Galaxy S5 в Польше. Теперь то же обновление появляется и на родине производителя – в Южной Корее, где операторы KT, SK Telecom и LG Uplus по OTA открыли доступ к новой... |
Sony Smart TV: в следующем году выйдет линейка с поддержкой Android TV6 декабря 2014 г., 6:04:12Sony объявила, что в 2015 году вся линейка HD и 4K Smart TV обзаведётся поддержкой Android TV. Причём первые такие телевизоры выйдут уже в конце февраля будущего года. Что же нам предложит новая линейка? Android TV сможет похвастаться полной... |
Первое фото смартфона Meizu MX4 на базе Ubuntu Touch6 декабря 2014 г., 6:03:26Meizu MX4 на базе Ubuntu Touch засветился на фото. Всё ближе и ближе наступает момент, когда смартфон Meizu MX4 на базе операционной платформы Ubuntu будет представлен широкой публике, правда фотографий изделия ещё никто не видел, но благодаря усилия... |
Флагманский смартфон Jiayu S3 будет стоить меньше $1506 декабря 2014 г., 5:56:19Компаня JiaYu, покорившая многих россиян своим более чем удачным смартфоном G3, ведет разработку нового флагманского моноблока S3, фотографии которого сегодня попали в Глобальную Сеть. Очень важным фактом об этом смартфоне является то, что его... |
Обзоры по теме
Google Nexus 6. Обзор28 января 2015 г., 1:04:10
9 User Rating: Be the first one! ... |
Google Nexus 5. Обзор27 января 2015 г., 22:53:4110 User Rating: Be the first one!... |
Полупланшет, полусмартфон — Обзор Asus Fonepad21 января 2015 г., 1:20:17
Корпус и дисплей Процессор Android и программы Полутелефон Итог Из всех идей в компании Asus выбирают самые безумные. Сначала это был планшет-нетбук Transformer Pad. Затем матрешка из телефона внутри планшета Padfone. А теперь вот и Fonepad — на... |
С небес на землю — Обзор планшета Prestigio MultiPad 7.0 Ultra+21 января 2015 г., 1:20:15
Минусы Плюсы Итог Весной этого года Prestigio заняла третье место по продажам планшетов в России. Она обошла такого гиганта, как Asus, и уступила только Apple и Samsung. Asus может оправдывать свое поражение, чем угодно: сокращением объема поставок,... |
Чуть больше музыки — Обзор HTC Desire 20021 января 2015 г., 1:16:31
Корпус и дисплей Звук Производительность и операционная система Камера Заключение Бюджетные смартфоны тайваньской компании HTC всегда оставались в тени своих больших и дорогих собратьев. Однако недавнее разделение всех своих аппаратов на две линейки... |
Специально для тех, кто любит кино — Обзор 3Q Q-Pad RC0718C21 января 2015 г., 1:16:23
Корпус Дисплей и звук Камера Производительность Операционная система Заключение Мы уже говорили о том, что сверхбюджетные планшеты представляют для многих из нас особый интерес. На этот раз нам на радар попался отечественный бренд 3Q, который выбра... |
На пути к единству – Обзор Sony Xperia Z121 января 2015 г., 1:14:52
Корпус Дисплей Камера Программное обеспечение Процессор, связь и время работы Заключение Последние лет пятнадцать были для Sony не из легких. Сначала рынок музыкальных плееров, на котором Sony была лидером еще с восьмидесятых, взорвал iPod. Затем... |
Официальный обзор неофициального приложения Droider18 января 2015 г., 21:13:38
Отличные новости, друзья! Теперь Droider можно читать прямо с любимого устройства в удобном формате и в крутом Material Design. Сегодня мы с радостью представляем обзор неофициального клиента, который был любезно сделан студией Work in... |
Большой Обзор: Готовим смартфон к Новому Году31 декабря 2014 г., 1:36:07
До Нового Года остался буквально денечек, а у некоторых всё ещё нет праздничного настроя, несмотря на наряженную ёлку и всеобщий ажиотаж. Но если праздничное дерево уже при параде, то чем хуже обожаемый смартфон? Редакция Droider считает, что ничем,... |
Топ-10 лучших смартфонов 2014 года по версии ItReviewer.ru30 декабря 2014 г., 2:17:42
2014-й год показал, что если с технической точки зрения на рынке мобильных устройств все более-менее в порядке — девайсы становятся все мощнее, все функциональнее и вместе с тем изящнее, то с точки зрения смыслов, новых сценариев использования мы... |
Инструкции по теме
Выбор и настройка медиацентра на базе Android4 февраля 2015 г., 14:45:28
Вступление Хотел бы поделиться опытом выбора и настройки медиацентра на базе Android'ных приставок. Сейчас их появилось очень много, все они чем-то отличаются, но в чем-то и похожи. Многие из моих знакомых, увидев у меня работающую систему, сознавались в том, что и сами о чем-то таком думали, но испугались... |
Первые скриншоты OxygenOS — новой прошивки от OnePlus3 февраля 2015 г., 15:13:02
Компания OnePlus за время своего недолгого существования успела отметиться не только удивительно низкой ценой на свое флагманское устройство, но и конфликтом интересов с Micromax. Китайский производитель не одобрил сотрудничества Cyanogen Inc. с индийской фирмой, после чего открыто заявил, что планирует... |
Предыдущая неделя на Root-Nation: 26.01-1.02/20153 февраля 2015 г., 15:12:52Всем доброе утро! Сегодня понедельник, а значит самое время подвести итоги прошедшей недели. У нас вышло достаточно много интересных материалов: авторские статьи, обзоры, новости, появилась очень полезная и интересная рубрика про кастомные ядра андроид. Что касается новостей, то интересных было мало.Тем... |
Ещё 2 прошивки для Jiayu G21 февраля 2015 г., 15:27:21
Со времени написания прошлого обзора прошивок для Jiayu G2 ("Прошивка Jiayu G2 (обзор прошивок, инструкция по прошивке Jiayu G2)") прошло много времени.. И за это время появилось 2 отличных прошивки - посмотрим, что они из себя представляют. Android 4.2.2 для Jiayu G2 Долгожданный порт Android 2.2... |
FAQ для владельцев Мини-PC на Android на примере MK809 III1 февраля 2015 г., 15:24:51
Я являюсь счастливым обладателем Мини-PC MK809 III, и поначалу вопросов по его эксплуатации возникало огромное количество: как обновить прошивку, чем управлять, как подключать периферийные устройства, какие приложения поставить и т.д. В данной статье я постараюсь описать наколенный опыт, чтобы им могли... |
Прошивка, Root, разблокировка загрузчика Asus Eee Pad Transformer TF3001 февраля 2015 г., 0:45:00
Asus Eee Pad Transformer TF300 Инструкция о том как прошить планшет трансформер Asus Eee Pad Transformer TF300 на новую прошивку. Установка официального обновления на Asus Eee Pad Transformer TF300 1. Узнайте территориальную принадлежность Вашего планшета (SKU). Зайдите в «Настройки» > «О планшетном... |
[recovery mode] Motorola Moto G — для начинающих и экономных31 января 2015 г., 14:51:16
После того, как компания Motorola была приобретена поисковым гигантом Google в 2011, новый владелец не оказывал никакого особо влияния на выпуск смартфонов. Но вскоре компания невероятно быстро и стремительно претерпела изменения. Первыми и весьма успешными продуктами обновленной Motorola стали Moto... |
[recovery mode] Обновляем Nexus 4, 7, 10 до Android 4.4 с новым интерфейсом31 января 2015 г., 14:19:55Все очень просто! 1. Берем устройство Nexus (4, 7, 10) 2. В меню Настройки/Приложения/Все находим приложение Google Services Framweork 3. Останавливаем его, стираем данные и очищаем кэш 4. Идем в Настройки/О телефоне/Обновление системы, видим Последнее обновление от 1970. тапаем Проверить сейчас и обновляемся. 5.... |
Получен root на свежевыпущенном Google Nexus S31 января 2015 г., 5:59:04
Только было стартовали продажи новенького аппарата от Google-Samsung, как на нем был получен root и установлен альтернативный Recovery: (кликабельно) Если вы вдруг уже стали счастливым обладателем данного телефона, то вот вам инструкция по рутованию. От меня вольный её перевод: 1. Перезагружаемся в... |
[recovery mode] Смартфон Just5 Spacer: 5 дюймов и 4 ядра за 4 950 рублей. Плюс две крышки в комплекте30 января 2015 г., 23:31:51
Героем данного обзора является первый смартфон бренда кнопочных телефонов Just5 — Just5 Spacer. Одной из особенностей данного смартфона является то, что он работает на базе нового процессора от MediaTek — MT6582M, а также приятная цена — 4 950 рублей (150$). Вообще, к телефонам марки Just5 я отношусь... |
-
Ключевые слова:
- Creative Commons,
- Инфографика,
- Векторная графика,
- графика,
- графические редакторы,
- python,
- calendar,
- круглендарь,
- информационные технологии,
- блог,

Комментарии (0)
Чтобы оставить комментарий, отзыв или написать пост о вашей отрасли, следует войти или зарегистрироваться, если у вас еще нет аккаунта.