首頁 美術繪圖 | 美術設計 | 熱門標籤 | 首選 | 首頁宣傳 | 近期作品 論壇: 發表 | 美術工作 | 美術比賽 | 展覽活動 | 美術相關 | 一般討論 | 美術同好 CG 討論 :: Photoshop | Painter | 3D 行動 | AMP

【 立即註冊 】 : 更改個人資料 : : 登入

會員名稱: 登入密碼: 保持登入
Type(Type) 所有的發表文章

前往頁面 ←上一頁  1 ... 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 ... 559  下一頁→

[h1]兩兩親吻、舉止親密的女性為主題[/h1]
「如果說男性性格讓我膽怯,對於一切與女性相關的,我卻完全感到輕鬆自在。」藝術家瑪莉‧羅蘭珊曾在著作「夜之手帖」透露對男女迥異的觀感。

在羅蘭珊的畫作中,常以兩兩親吻、舉止親密的女性為主題。她的性向撲朔迷離,引人遐想。

正在中正紀念堂展出的「唯美‧巴黎─羅蘭珊畫展」,呈現了羅蘭珊最早的蝕刻版畫「吹笛女子」,透露出藝術家對女同志題材的興趣。台灣藝大教授劉俊蘭指出,這幅畫完成於一九○四年的版畫,靈感得自描寫女同志情愛的詩文「畢莉提斯之歌」。羅蘭珊曾與詩人阿波里內爾相戀五年、與德國男爵奧圖.馮.魏真有過七年婚姻。但她畫過的男人寥寥可數,竟被笑稱「比畫貓狗的次數還要少!」即使畫男人,她筆下的男人常是缺乏男子氣概的「溫柔漢」,形象優雅更似女性。與她交往過、她中意的男性類型也流露中性或虛幻的特質。

情史豐富的羅蘭珊擁有不少女性密友,包括設計師妮可.波瓦黑—葛胡特、陪伴她終老的女管家蘇珊娜.莫侯。

一九二一年離婚後的羅蘭珊,肢體更加解放。包括女女相親的「吻」、「吉他與兩個少女」裡女性相依偎,皆展現出二○年代的頹廢氛圍。「吉他與兩個少女」中還描繪了羅蘭珊畫作裡較少出現的裸女,舉臂相擁的女子,頹廢仍不失優雅,正是羅蘭珊心儀的典型。(2014-07-19 20:52)

[h1]DDR3 vs DDR4 速度、規格比較[/h1]


DDR3 DDR4 規格簡單比較如下:

1. 標準電壓: 1.5V (DDR3) vs. 1.2V (DDR4)

2. 低電壓: 1.35V (DDR3) vs. 1.05V (DDR4)

3. DDR 速度效能:

DDR3-800, DDR3-1066, DDR3-1333, DDR3-1600, DDR3-1866(超頻), DDR3-2133(超頻)
DDR4-2133, DDR4-2400, DDR4-2667, DDR4-3200, DDR4-3466, DDR4-3733, DDR4-4000, DDR4-4266

4. DDR 顆粒密度

DDR3: 512Mb ~ 8 Gb
DDR4: 2Gb ~ 16 Gb

5. ODT 控制

DDR3: 需要 ODT Signaling
DDR4: 不需要 ODT Signaling(簡化)




(2014-07-18 22:25)

[center]FF 24[/center]
##DIV##
[center]
[h1]FF24: Fancy Frontier 24 會員參展 @ NTU Stadium[/h1]
Illustration Collection FF24新刊封面 - 鴉參 Illustration Collection
SpiderLilyRoad Spider Lily Road - 曼珠沙華之路
日扇靈裝 精靈少女 四糸乃 - Date A Live
火鳳二創 FF24火鳳二創 - Ravages of Time Fan Art
20120821_800 <重逢> Hiroshi Studio
[hr]
More "Fancy Frontier" Topic Related artworks

http://vovo2000.com/tags/ff24/
http://vovo2000.com/tags/ff/
http://vovo2000.com/tags/fancy/

(若您有參展 FF24,將您的作品加上 FF24 分類標籤,方便整理和搜尋!)
(若您已經確認攤位號碼,請在該作品內文標上攤位,方便其他同好找到你)

[hr]
Fancy Frontier 24 @ NTU Stadium


[hr]
See Also:


「CWT」會員相關創作 :: "CWT" Artworks Creation




[/center](2014-07-15 23:48)


07/15 21:50 已經於 G+, FB, Twitter, Plurk 宣傳此篇詩集出版訊息。
(2014-07-15 21:54)

[h1]These pchomebot are from SPARQnet & SPARQ.com.tw[/h1]

代碼:

[07:50] > grep 'pchomebot.htm)' /var/log/apache2/access.log | awk '{print $1}' > /tmp/pchomebot.txt
[07:52] > grep 'pchomebot.htm)' /var/log/apache2/access.log.1 | awk '{print $1}' >> /tmp/pchomebot.txt
[07:54] > sort /tmp/pchomebot.txt | uniq



113.196.127.66
113.196.127.67
113.196.127.68
113.196.127.69
113.196.127.70
113.196.127.71
113.196.127.72
113.196.127.73
113.196.127.74
113.196.127.75
113.196.127.76
113.196.127.77
113.196.127.78
113.196.127.79
113.196.127.80
113.196.127.81
113.196.127.82

122.147.50.17
122.147.50.18
122.147.50.19
122.147.50.20
122.147.50.21
122.147.50.22
122.147.50.23
122.147.50.24
122.147.50.25
122.147.50.27
122.147.50.28
122.147.50.29
122.147.50.30

123.51.198.66
123.51.198.67
123.51.198.68
123.51.198.69
123.51.198.70
123.51.198.71
123.51.198.72
123.51.198.73
123.51.198.74
123.51.198.75
123.51.198.76
123.51.198.77
123.51.198.78
123.51.198.79
123.51.198.80
123.51.198.82

220.228.172.130
220.228.172.131
220.228.172.132
220.228.172.133
220.228.172.134
220.228.172.135
220.228.172.138
220.228.172.139
220.228.172.140
220.228.172.141
220.228.172.143
220.228.172.144
220.228.172.145
220.228.172.146


(2014-07-14 16:03)

[h1]PChome Robot 完全不理會 robots.txt[/h1]

... 亂抓 robots.txt disallow 的連結。

以為 YodaoBot(有道) 已經是很誇張的 spider bot
沒想到 PCHOME 更是誇張!
pchomebot.htm 頁面也沒有任何聯絡資訊!

一天抓 300,000+ pages/day ,連續好幾天,令人各種無言。


Add this into your .htaccess or conf files
代碼:

 
     BrowserMatch       "PChomebot"      is_crazy_bot

    #
    # Ban is_crazy_bot:  PCHOME BOT
    #
    <FilesMatch "^(.*)$">
          Order Allow,Deny
          Allow from all
          Deny from env=is_crazy_bot
    </FilesMatch>

(2014-07-14 15:45)

[h1]「張萬傳」典藏展:萬世流芳 薪火相傳 7/17 ~ 8/12 2014[/h1]

Wan Shixin Exhibition of Zhang Wan-Chuan Collection Heirloom

展覽簡介:

此次典藏展展出收藏家張垂弘歷年來陸續珍藏
台灣野獸派代表人物—張 萬傳的近百件經典作品。
希望能將張萬傳珍貴的藝術創作為傳世 的文化瑰寶,傳承給下一代,
以此精神,展現收藏家對文化之責任與對歷史的 使命感。
期望藉由本展美事,讓更多雅好藝術之美的朋友,
感受這位橫跨台灣藝術史六十載的藝術家—張萬傳,
如何在經歷日 治時期、光復後以及經濟蓬勃發展的時代下,
堅持藝術的理想與樹立台灣野獸 派之精神。

「魚」的創作題材,被視為張萬傳的標誌。
張萬傳曾說:「每條魚都有自己的 個性和自己的感情。」
70年的繪畫歲月中,張萬傳畫了數萬條魚,
但每條魚的 身型、樣貌、色澤等…各個小局部均有不同。
雖然筆觸狂放率性看似寫意,
但 仍然可以清楚分辨魚的種類,可見張萬傳對每條魚都觀察入微,
反覆琢磨,已 畫到出神入化的境界。在他的描繪下的魚都有著他個性的投射,
所以每條魚都 能各展姿態充滿生命力。

在張萬傳的「裸女」畫中,常見以強烈的紅綠對比色來作為背景,
並以大筆 觸、大塊顏色來呈現;但是裸女人物在畫面中卻絲毫不失色,
並且有力的與畫 面中的強烈色塊抗衡著。
相較於同時代的藝術家,張 萬傳的裸女創作更重視被描繪者的真實感,
每個裸女都有張萬傳想要表現的個 性跟意境,
足以體現「野獸派」風格與精神。

藝術家簡介:
狂野奔放的台灣野獸派-張萬傳(1909-2003)

張萬傳為臺灣早期赴日學習西洋繪畫的重要前輩藝術家之一。
從年少時期的十 餘歲開始,到九十五歲辭世,漫長的八十餘年藝術生涯,
畫筆始終不曾離手,甚至到餐廳吃飯,都可以沾醬汁作畫。

創作中融合野獸派與表現主義的技法,
以豪放的筆觸,強烈的色塊,簡潔的線條,創造出感性豪邁的台灣野獸派風 格。
形美色鮮的魚,性格鮮明的裸女,富有情感的淡水白樓…。
張萬傳用畫筆 見證台灣藝術與歷史發展,是台灣藝術史上的重要人物。

展期: 2014. 7/17-8/12 (可蓋藝文護照展覽章~)
展覽地點: 交大藝文空間
辦理單位:
主辦單位:名山藝術、交通大學藝文中心
贊助單位:交通大學校友會、財團法人交大思源基金會

開放時間:星期一~星期六10:00-17:00; 星期日不開放
洽詢電話: ( 03 ) 513 - 1233
展場地址: 新竹市大學路 1001 號 交通大學圖書館 B1 藝文空間(2014-07-12 17:53)

[h1]新竹「田記烤鴨」半隻價格/全隻價錢演化史[/h1]


田記半隻烤鴨 $130 NTD ... 2000 年 (在新竹中華路林森路振興路五向路口,廟旁)

田記半隻烤鴨 $140 NTD ... 2003 年

田記半隻烤鴨 $150 NTD ... 2005 年

田記半隻烤鴨 $160 NTD ... 2007 年 (整隻 $300 NTD)

田記半隻烤鴨 $170 NTD ... 2008 年 (整隻 $320 NTD)

田記半隻烤鴨 $180 NTD ... 2010 年 (記得好像 2009 ~ 2010 左右搬到旁邊大樓1F)

田記半隻烤鴨 $200 NTD ... 2012 年

田記半隻烤鴨 $220 NTD ... 2014 年 (整隻 $420 NTD)

田記半隻烤鴨 $230 NTD ... 2016 年

田記半隻烤鴨 $250 NTD ... 2017 年 (一次漲 $20,又搬到新大樓 1F)

田記半隻烤鴨 $250 NTD ... 2018 年 Q3
田記整隻烤鴨 $480 NTD ... 2018 年 Q3

田記半隻烤鴨 2018/12/31 ... $260 NTD
田記全隻烤鴨 2018/12/31 ... $500 NTD
半隻: NTD 250 -> 260
一隻: NTD 480 -> 500

田記半隻烤鴨 2022/10/11 ... $300 NTD
田記全隻烤鴨 2022/10/11 ... $570 NTD
半隻: NTD 260 -> 300
一隻: NTD 500 -> 570

田記半隻烤鴨 2024/09/27 ... $330 NTD
田記全隻烤鴨 2024/09/27 ... $640 NTD
半隻: NTD 330 -> 330
一隻: NTD 570 -> 640



[hr]
25 年來新竹田記烤鴨約上漲 250% 價格;
本來在路口的違建(?),後來搬到旁邊林森路的大樓一樓。


2016/三月份左右,在附近新建的大樓,
就在振興路、林森路、中華路、育英路交叉路口那棟新大樓的一樓,已經掛上新的「田記」黑底看板。 應該 2016 年中會搬過去。

=> 可以外帶整隻、半隻(祭拜使用,或自己料理)

=> 可以切片 + 不炒純剁(帶回去煮鴨肉麵)

=> 可以切片 + 熱炒(小辣、中辣、大辣)

附鴨麵餅 + 大蔥,可加購。



(2014-07-12 17:47)

[h1]Google 眼鏡有「心靈控制」Apps[/h1]



有廠商開發心靈控制偵測裝置軟體 + 硬體(額頭那個類似耳麥的),配合 Goolge 眼鏡,
讓 CNN 記者可以「進行簡單的心靈控制」


目前,當然是先只能用「選擇題」的方式來控制

如:拍照(選: 要拍上下左右) --> 上傳到 Twitter(選: 要上傳到臉書 or 推特)


(2014-07-12 16:16)

[h1]日本「姓氏」來源衍生種類、常見姓氏分類[/h1]



根據這張圖片,「大略」可分五類,
其中前三類都是和「居住地、地理、地形、位置」相關

各種類也有混合。

1. 居住地附近的「地形、周邊、建築、景觀」衍生姓氏:

山本、山田、田中、吉田、山內、本田、中山、小林、高橋、濱口、
大野、小野、中島、大島、小川、山崎、木村

2.「 實際的地名、景點」衍生姓氏

鈴木、渡邊、佐佐木、小笠原、池田、石川

3. 相對「位置、方位(東西南北、內外、上中下)」衍生姓氏

東、東村、東原、西野、西村、北村、北原、北野、南原、南野、內山、內川、內村
中島、中村、中野、前田、川上、下野

4. 職業相關的地名衍生姓氏

犬飼, 鵜飼, 大藏, 門倉, 矢倉, 土保

5. 「藤原氏(藤原氏系)」衍生相關,配合職業或地理衍生姓氏

加藤(加賀守)、近藤(近江守)、齋藤(齋)、工藤(工)、佐藤(佐)、伊藤(伊勢守)


(2014-07-12 16:13)

[h1]CentOS 7 安裝失敗 "Warning: /dev/root does not exist, could not boot"[/h1]


[h2]How To Fix CentOS could not boot Install failures[/h2]


1. Around buring CentOS 7 DVD, please reassign the Label as "CENTOS7" (No Space within label)

2. Then, around Boot Disk Menu, press "Tab",
Change Label from "CENTOS\x207\x20x86_64" to "CENTOS7"
(ie. remove x20 space)

3. If you dd CentOS 7 Install DVD into USB Boot Disk,
Just using mtools/mlabel to change USB disk Label, like the following commands:

See also: http://vovo2000.com/phpbb2/viewtopic-365717.html (Same issues Fedora 17/18/19/20)

代碼:


$ yum install mtools  (or, apt-get install mtools)

$ sudo echo "mtools_skip_check=1" > ~/.mtoolsrc

$ sudo mlabel -i /dev/sdX1 ::CENTOS7    (the '::' prefix is a must!)







代碼:

[OK] Started Dracut Pre-trigger hook.
     Starting udev Coldplug all Devices...
     Mounting Configuration File System
...
[OK] Reached Target system Initialization.
     Starting Show Plymouth Boot Screen...
[OK] Started Show Plymouth Boot Screen.
[OK] Reached Target Paths.
[OK] Reached Target Basic System.

(Halt for 120+ seconds)


dracut-initqueue[682]: Warning: Could not boot
dracut-initqueue[682]: Warning: Could not boot
dracut-initqueue[682]: Warning: /dev/root does not exist

Starting Dracut Emergency Shell...

Generating "/run/initramfs/rdsosreport.txt"

Entering emergency mode. Exit the Shell to Continue.

Type "journalctl" to view system logs.

You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after mounting them and attach it to a bug report.

dracut:/#

(2014-07-10 16:16)

[h1]HOW TO Install iperf (iperf3) on CentOS 7[/h1]



Step-1. You need to install EPEL(Extra Packages for Enterprise Linux) repository


==> Visit https://fedoraproject.org/wiki/EPEL, search "EL7" for CentOS 7
==> Visit https://fedoraproject.org/wiki/EPEL, search "EL6" for CentOS 6.X

Click the link, then you will find an EPEL Release RPM

Then,

==> sudo rpm -ivh http://mirror01.idc.hinet.net/EPEL/beta/7/x86_64/epel-release-7-0.2.noarch.rpm

NOTE: For the time being(2014 July), the EPEL is still under beta.



Step-2. After done of EPEL repository RPM installation, yum install iperf3

==> sudo yum install iperf3


Step-3: run "iperf3"

==> It is now available on your CentOS 7, yet the app name is "iperf3"

(2014-07-10 15:43)

[h1]Fedora 20 / CentOS 7: How to "text mode" Install[/h1]



1. Press 'Tab' (edit) with "Install CentOS 7" or "Install Fedora 20" selected

2. Remove "quiet" kernel parameter

3. Add "text" kernel parameter

(2014-07-10 12:13)

[h1]Cat related CG Artwork[/h1](2014-07-08 23:32)

[center]Cat Art[/center]
##DIV##
[center]
[h1]「貓」插畫,「貓」美術繪圖, 「貓」相關創作 - "Cat" Drawing Art[/h1]
120628_PersonalArtbookV4_CoverIllustration_AD_step04_adjust_02_72dpi B.c.N.y. 個人精選畫冊第四冊:四際光
acvcad11 練習~~ - Cat Practice
cat_adv 忘我的妖貓 進階版 - Cat Fairy
UnHappy-2 Blue - Unhappy Boy & His Cat
飛行貓1024pix 飛行貓AirCat
12011801b 貓娘之夜 - Night of Cat
黃建豪 貓女 完稿2 UP 雙刃貓女 - Two Blades Slayer
coverII-5畫細OKKs Mint & RosemaryII
柴郡貓(Chesshire Cat) Alice in Wonderland
Grilandcat1 少女與貓 - Girl & Cat
DSC03795-1 《思。念》 - Missing You
1 奇幻生物設計 - Creature Cat Design
貓女巫 原創:貓魔女 - Cat Lady
1133793381 貓 CAT CAT CAT
輔助性職業B 輔助性職業之又是貓耳娘 - Cat Girl Carry
集會所溫泉浴場-貓咪時間 集會所溫泉浴場-貓咪時間 - Cat's Spring
[hr]
More "Cat" Topic Related artworks

[url=http://vovo2000.com/tags/貓/]http://vovo2000.com/tags/貓/[/url]
http://vovo2000.com/tags/cat/
[hr]
See Also:
[url=http://vovo2000.com/tags/狗/]
「狗」相關創作 :: "Dogs" Artworks Creation
[/url]



[/center](2014-07-08 23:29)

[h1]CentOS 7.0 正式上市 (2014/07/07),支援 CentOS 6.5 直接升級[/h1]


CentOS 7.0 (7.0.1406) 主要特色:

1. 提供 CentOS 6.5 直接升級到 CentOS 7.0

2. Linux Kernel 版本為 3.10.X (3.10 為 LTS Long Term Support, 目前最新是 3.10.47)

3. CentOS 7.0 支援 EOL 為 10 年後,也就是支援到 2014/06/30(比較: Ubuntu LTS 通常是 3~5 年支援)

4. 下載頁面目前只有 x86_64 64-bit 版本,沒有 x86 32-bit 版本

5. 下載有分 DVD (4GB 左右), LiveCD/KDE-Live/GNOME-Live (1GB 左右), NetInstall(0.4 GB), Everything (6.6 GB),
CentOS 建議是使用 DVD.iso

6. 主要改變:

6.1 網路支援 40GbE Ethernet (未來 Data Center ToR Server 的主流)

6.2 儲存系統支援 Kernel Space iSCSI/FCoE

6.3 檔案系統預設 XFS 為預設 FileSystem (CentOS 6.5 為 EXT 系列)

6.4 檔案快照支援 LVM-snapshot for EXT4 & XFS

6.5 系統管理改用 systemd、firewalld 及 GRUB2

(總之,主要就是跟著 RHEL 7 變動)


CentOS 7 一般下載: http://isoredirect.centos.org/centos/7/isos/x86_64/

Hinet CentOS 7 下載 => http://mirror01.idc.hinet.net/CentOS/7/isos/x86_64/

CentOS 7 Torrent 下載 => http://mirror01.idc.hinet.net/CentOS/7/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.torrent

官方 CentOS 7 Blog => http://seven.centos.org/


(2014-07-08 14:15)

BIG(2014-07-03 23:11)

[center]Illustrator Painting Creation[/center]
##DIV##
[center]
[h1]向量插畫/Illustrator繪圖/以拉圖 Illustrator Artworks - July(鎖骨[/h1]
Lantern festival 北七!你提錯了啦! - Wrong Holiday! You Fool
happy Easter 復活節快樂 - Happy Easter!
正太木馬 兒童節快樂 - Happy Children's Day
森森不息 森森不息~ - Forest, Lakes, Tree and Animals
wonderland 未成年請勿抽菸 - Young People Shall Not Smoke
[hr]
More 鎖骨(July)'s Artoworks

http://vovo2000.com/artist/July/
http://vovo2000.com/paintbbs/art/July/

[hr]
See Also:
[url=http://vovo2000.com/tags/向量/]
「向量」相關創作 :: "Vector Drawing" Artworks Creation
[/url]


「Alice」相關創作 :: "Machine/Robots" Creation Painting



「Illustrator」相關創作 :: "Illustrator" Artworks Creation


[url=http://vovo2000.com/tags/節/]
「節慶」相關創作 :: "Holidays" Artworks Creation
[/url]


[/center](2014-07-03 23:09)

john7905241990 寫到:


https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-xfp1/t1.0-9/s261x260/10415666_776017755751583_1001515108426741894_n.jpg

😈 😈



讚阿!


一定很至少有有兩次 C.C.F Special 吧!?(2014-07-02 11:26)



GOAL: Convert old gallery v1 (or even v2) .dat serialized data to SQL data

Gallery v1.0: About 2001 ~ 2002, which used PHP serialized data as DB
Gallery v1.x: About 2002 ~ 2004, which I still used PHP serialized data as Database


These codes are to parse & convert legacy Gallery V1 DB *.dat file into SQL
in order to build them as static HTML pages (or Dynamic Pages Integration, yet in fact static archive).
Of course, only some of fields were retrieved/parse.

Note: Main stream Gallery v2/v3+ has integrated with MySQL, no such issues any more!



Q: What fields were reterieved from Gallery v1/v1.x album.dat?
A:
gallery_type => For my internal usage. (e.g. I got many different Gallery v1/1.x ... repositories)
albumname => Gallery v1 album folder name
imgitem => Album Caption or Album Title
imgtype => I set it as "RDIR" for root album, 'DIR' for sub-album
caption => Detail Description of this album(sub-album)
datetime => Creation date of this album
comment => Only useful for 'ROOT Album", contains all sub-album in CSV format. Empty if this is a sub-album


Q: What fields were reterieved from Gallery v1/v1.x photos.dat?
A:
gallery_type => For my internal usage. (e.g. I got many seperated/different Gallery v1/1.x ... repositories)
albumname => Gallery v1 album folder name
imgitem => Image Name
imgtype => Image Type (jpg/png/gif/...)
caption => Detail Description of this IMAGE (Image title)
datetime => Creation date of this album (== uploadDate)
comment => The comment of this Image, only include "username/datetime/comment", use some big5-utf8 translate.


Q: It looks like that you combined "photos.dat & album.dat" into single Database Table?
A: Yes, because my requirement is very simple,
make gallery v1 photo repositories into static pages.
(though the "static pages" are in fact dynamic generated from PHP + DB)

Q: Didn't see your code parsing sub-album(DIR) CSV into root album comment field?
A: To make the conversion faster, and, my root album are not that many,
so I did that __manually__.


Q: Why not using Gallery Project's Import Tool? Do you ever use official tools to import v1.0 into v2.x
A: True, I ever tried it years ago around 2007 ~ 2011;
yet, futile; the Gallery v1.x album.dat & photos.dat looked too legacy to be imported.


Q: I got lots of SPAM messages in my Gallery v1 photos.dat, what I can do?

A: I have the same issue,
but since you cloud make them into database,
SPAM-comment removal will be much easier by using something like
代碼:

SELECT * from gallery_database_table where comment
like '%some bad words%' or comment like '%another bad words%'

compared digging into thousands of photos.dat




Convert USAGE Example:
代碼:

$ find /var/www/gallery-v1/ -name "album.dat" | xargs parse_album_dat_to_database_sql.php



[h1]parse_album_dat_to_database_sql.php[/h1]
代碼:

<?PHP

/*
Goal: Convert Gallery v1 album.dat format into DataBase SQL
*/

/* data */
$title = array();
$desc = array();
$dtime = array();

function is_line_still_value($line_str)
{
   if (strstr($line_str, "' => "))
      return false;
   else
      return true;
}

function get_val($str, $is_str = true, $multiple_lines = false)
{

   if ($multiple_lines == false)
      list($a, $b) = explode("' => ", str_replace("\r", "", $str));
   else
      $b =  str_replace("\r", "", $str);

   if ($is_str)
   {
      /* 字串要去掉頭尾 quote */
      if (substr($b, 0, 1) == "'" && $multiple_lines == false)
      {
         $b = substr($b, 1, strlen($b) - 1);
      }
      
      $b = str_replace("',\n", '', $b);
   }
   else
   {
      $b = intval(str_replace(',', '', $b));
   }

   return $b;
}

function get_photosdat_pass_1($str, $idx)
{
   global $title, $desc;
   $done_1 = 0;
   $done_2 = 0;
   foreach(preg_split("/((\r?\n)|(\r\n?))/", $str) as $line)
   {
      $line .= "\n";
   
      if ($done_1 == 0 && strstr($line, "'title' => "))
      {
         $title[$idx] = get_val($line);
         $done_1++;
      }
      
      if ($done_2 == 0 && strstr($line, "'description' => "))
      {
         $desc[$idx] = get_val($line);
         $done_2++;
      }
      
      if ($done_2 == 0 && strstr($line, "'description' => "))
      {
         $desc[$idx] = get_val($line);
         $done_2++;
      }

      if ($done_1 && $done_2)
         break;
   }

   /*
    * Optional
    */
   $title[$idx] = mb_convert_encoding($title[$idx], 'UTF-8', 'BIG-5');
   $desc[$idx] = mb_convert_encoding($desc[$idx], 'UTF-8', 'BIG-5');

   if (trim($desc[$idx]) == 'No description')
   {
      $desc[$idx] = '';
   }
}


/*
* BEGIN
*/
if (isset($argv[1]) && file_exists($argv[1]))
{

   echo "CHECK albums.dat Integrity and Parse it, file count=".count($argv)." ...\n";

   for ($i=1; $i<(count($argv)); $i++)
   {
      $str = file_get_contents($argv[$i]);
      $var = unserialize($str);

      // echo "[$i] Checking ".$argv[$i]."\n";
      if ($var === false || strlen($str) <= 3) {
         echo "_____ERROR_____ @ ". $argv[$i] . "\n";
         echo "ABORT: Please Fix this first! You could restore it from backup album.dat.[1~N]\n";
         exit;
      }

      //echo "[$i] Parsing ".$argv[$i]."\n";
      
      $str = var_export($var, true);
      get_photosdat_pass_1($str, $i);
      
      // echo $argv[$i].' => '.$title[$i].'_'.$desc[$i]."__EOF\n";

      list($a, $folder, $c) = explode('/', $argv[$i]);

      echo "Insert into gallery_database_table (gallery_type, albumname, imgitem, imgtype, caption, datetime, comment)
             values(0, '".$folder."', '".$title[$i]."', 'DIR', '".$desc[$i]."', 0, '');\n";

      // "Insert into gallery_database_table (gallery_type, albumname, imgtype, imgitem, caption)
      //   values(1, '$argv[$i]', '$title[$i]', 'DIR', '0', '$desc[$i]')"
   }

}
else
{
   echo 'find /gallery-folder/ -name "album.dat" | xargs php parse_album_dat.php';
}
exit;



[h1]parse_photos_dat_to_database_sql.php[/h1]
代碼:

<?PHP

/*
Goal: Convert Gallery v1 photos.dat format into DataBase SQL
*/


/*
找法:
1. 先 parse var export 一行一行找,找到關鍵字
2. 如果下一行,沒有 '=>' '[' ']'   那麼下一行還是資料

資料欄位
auto-idx, folder, imgname, imgtype, caption, date, comment(serialized)
*/


/* data */
$imgname = array();
$imgtype = array();
$caption = array();
$dateint = array(); /* int */
$comment = array(); /* three diementional array */

function is_line_still_value($line_str)
{
   if (strstr($line_str, "' => "))
      return false;
   else
      return true;
}

function get_val($str, $is_str = true, $multiple_lines = false)
{
   //   'name' => 'waidai_05',
   //  'type' => 'jpg',
   //
   //  'uploadDate' => 123124312,     

   if ($multiple_lines == false)
      list($a, $b) = explode("' => ", str_replace("\r", "", $str));
   else
      $b =  str_replace("\r", "", $str);

   if ($is_str)
   {
      /* 字串要去掉頭尾 quote */
      if (substr($b, 0, 1) == "'" && $multiple_lines == false)
      {
         $b = substr($b, 1, strlen($b) - 1);
      }
      
      $b = str_replace("',\n", '', $b);
   }
   else
   {
      $b = intval(str_replace(',', '', $b));
   }

   return $b;
}

/*
Pass #1 從零開始找
*/
function get_photosdat_pass_1($str, $idx)
{
   global $imgname, $imgtype, $caption, $dateint;
   $done_1 = 0;
   $done_2 = 0;
   $done_3 = 0;
   $done_4 = 0;
   foreach(preg_split("/((\r?\n)|(\r\n?))/", $str) as $line)
   {
      $line .= "\n";
   
      if ($done_1 == 0 && strstr($line, "'name' => "))
      {
         $imgname[$idx] = get_val($line);
         $done_1++;
      }
      
      if ($done_2 == 0 && strstr($line, "'type' => "))
      {
         $imgtype[$idx] = get_val($line);
         $done_2++;
      }
      
      if (($done_3 < 31 && $done_3 > 0) || strstr($line, "'caption' => "))
      {
         if ($done_3 == 0)
            $caption[$idx] = get_val($line);
         else
         {
            if (is_line_still_value($line) == true)
               $caption[$idx] .= get_val($line, true, true);
            else
               $done_3 = 31;
         }
         $done_3++;
      }
      
      if ($done_4 == 0 && strstr($line, "'uploadDate' => "))
      {
         $dateint[$idx] = get_val($line, false);
         $done_4++;
      }

      if ($done_1 && $done_2 && $done_3 >= 31  && $done_4)
         break;
   }

   /*
    * Optional
    */
   $imgname[$idx] = mb_convert_encoding($imgname[$idx], 'UTF-8', 'BIG-5');
   $caption[$idx] = mb_convert_encoding($caption[$idx], 'UTF-8', 'BIG-5');
}

/*
Pass #2 從 ["comments"]=> 往後找下列三個
["commentText"]=>
["datePosted"]=>
["name"]=>
*/
function get_photosdat_pass_2($str, $idx)
{
   global $comment;
   $done_1 = 0;
   $done_2 = 0;
   $done_3 = 0;
   $done_4 = 0;

   $comment_count = 0;

   $comment[$idx] = array();
   $comment[$idx][$comment_count] = array(3);

   list($tmp, $str) = explode("'comments' => ", $str);

   foreach(preg_split("/((\r?\n)|(\r\n?))/", $str) as $line)
   {
      $line .= "\n";

      if ($done_1 == 0 && strstr($line, "'name' => "))
      {
         $comment[$idx][$comment_count][0] = get_val($line);
         $done_1++;
      }
      
      if ($done_2 == 0 && strstr($line, "'datePosted' => "))
      {
         $comment[$idx][$comment_count][1] = get_val($line, false);
         $done_2++;
      }
      
      if (($done_3 < 31 && $done_3 > 0) || strstr($line, "'commentText' => "))
      {
         if ($done_3 == 0)
            $comment[$idx][$comment_count][2] = get_val($line);
         else
         {
            if (is_line_still_value($line) == true)
               $comment[$idx][$comment_count][2] .= get_val($line, true, true);
            else
               $done_3 = 31;
         }
         $done_3++;
      }
   
      if ($done_3 >= 31 && $done_1 && $done_2)
      {

         $done_1 = 0;
         $done_2 = 0;
         $done_3 = 0;

         /*
          * Clean Gallery's SPAM comments
          */
         if (  (stristr($comment[$idx][$comment_count][2], "url="))
            || (stristr($comment[$idx][$comment_count][2], "url:"))
            || (substr_count($comment[$idx][$comment_count][2], 'http') >= 2)
            || (strlen(trim($comment[$idx][$comment_count][2])) <= 2)
            || ($comment[$idx][$comment_count][2] == $comment[$idx][$comment_count][0])
            || (mb_detect_encoding($comment[$idx][$comment_count][0]) == 'ASCII'
               && mb_detect_encoding($comment[$idx][$comment_count][2]) == 'ASCII')
               )   
         {
            $comment[$idx][$comment_count] = null;
            continue;
         }
         
         /*
          * Optional: convert BIG-5 --> UTF-8
          */
         $comment[$idx][$comment_count][0] = mb_convert_encoding($comment[$idx][$comment_count][0], 'UTF-8', 'BIG-5');
         $comment[$idx][$comment_count][2] = mb_convert_encoding($comment[$idx][$comment_count][2], 'UTF-8', 'BIG-5');
         

         $comment_count++;
         $comment[$idx][$comment_count] = array(3);
      }
   }
}

/*
* BEGIN
*/
if (isset($argv[1]) && file_exists($argv[1]))
{

   echo "CHECK Photos.dat Integrity and Parse it, file count=".count($argv)." ...\n";

   for ($i=1; $i<(count($argv)); $i++)
   {
      $str = file_get_contents($argv[$i]);
      $var = unserialize($str);

//      echo "[$i] Checking ".$argv[$i]."\n";
      if ($var === false || strlen($str) <= 3) {
         echo "_____ERROR_____ @ ". $argv[$i] . "\n";
         echo "ABORT: Please Fix this first! You could restore it from backup photos.dat.[1~N]\n";
         exit;
      }

//      echo "[$i] Parsing ".$argv[$i]."\n";
      for ($j=0; $j<count($var); $j++)
      {
         $str = var_export($var[$j], true);
         get_photosdat_pass_1($str, $j);
         get_photosdat_pass_2($str, $j);

         /*
         var_dump($imgname[$j]);
         var_dump($imgtype[$j]);
         var_dump($caption[$j]);
         var_dump($dateint[$j]);
         var_dump($comment[$j]);
          */
         $comment[$j] = serialize($comment[$j]);
         list($a, $folder, $c) = explode('/', $argv[$i]);
         
         echo "Insert into gallery_database_table (gallery_type, albumname, imgitem, imgtype, caption, datetime, comment)
               values(0, '".$folder."', '".$imgname[$j]."', '".$imgtype[$j]."', '".$caption[$j]."', ".$dateint[$j].",
               '".$comment[$j]."');\n";
      }
   }
}
else
{
   echo 'find /gallery-folder/ -name "photos.dat" | xargs php parse_photos_dat.php';
}
exit;


(2014-06-30 00:25)

前往頁面 ←上一頁  1 ... 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 ... 559  下一頁→