網頁

2010年12月27日 星期一

WebGL - Other

Last Update: 2010/12/28 10:24+08
WebGL other (雜項、未整理)


=======================================

Restriction of image size:
Texture 的 width / height, 限制必須為 2 的次方
參閱WebGL and OpenGL Differences



=======================================

2010年10月18日 星期一

Xna Test

Last Update: 2010/10/19



Xna 的一些試作
物件選取/操作、粒子系統、選單等等




Fluid Fire

流體火焰
Last Update: 2010/11/24 20:30+08





Preface


這是不是貼圖唷, 是算出來的.
結合流體力學、熱力學、Volume Render & Cuda
共使用 125k (50^3) 個格點

影片上傳後的品質好像變差了,還在找怎樣編碼比較好
燃燒閃燃

不能再做其它介紹了,前公司似乎有什麼合作案^︿^










Painting on Mesh

Last Update: 2010/12/18 12:45+08








Intro


上面的影片是用 DirectX 完成的
配合一些基本的向量概念

步驟大致分為

◆ Step1
以滑鼠投影到3D空間的射線與Mesh構成之平面(Plane)
求得滑鼠點擊到的位置(N)
這就不贅述了


◆ Step2
求得 N 在 Mesh 上之 UV 貼圖座標

如下圖所示
PAB為構成Mesh之三頂點


我們在 Step1 中會求得滑鼠射線在平面上的交點
沒有交點自然就沒有 Step2
因此,若 PA 與 PB 不為平行線
就存在著


在三維空間表示成

我們只要求解 變數 a、b

在得知了 a、b ,我們可以求得 UV貼圖座標,例如





還有個問題,請看下圖,是由 0 <= a、b <= 1,所構成之平面

很明顯的,我們的Mesh僅只佔了一半的面積
從上圖也可以看出

解出 c、d
只要滿足 0 <= a、b、c <= 1 就表示在Mesh所構成的三角形裡
d 怎樣的無所謂,看上圖,當 a、b、c 都被限制住的話,d 也跑不掉。






參考


自己(雖然可能不是什麼好物。_。)




About Me

Last Update: 2010/11/24 10:35+08



認證===



SCJP
點我看大圖 Asp.net App

SCWCD
點我看大圖 Asp.net App


MCTS
點我看大圖 Mcts

.Net Framework3.5, Asp.net Application
點我看大圖 Asp.net App





作品集===



Graphics

彈性形變:以頂點(Vertex)操作達成之形變效果

Painting on Mesh:在Mesh上繪圖

Fluid Fire: 結合 流體力學、熱力學、Volume Render & Cuda

Xna Test:一些試作(物件選取/操作、粒子系統、選單等等...)





2010年10月16日 星期六

彈性形變(計算機圖學)

這是基於彈性及對頂點的操作而進行的變形
為了避免大量的運算,省略了點與點之間的連接作用
而改為令所有點都參考質量中心點而作用
進而達成娛樂或遊戲所需的效果。








參考:
Matthias Müller-FischerMeshless Deformations Based on Shape Matching



動態掛載 DLL & 調用 Method

Dynamically mount DLL (Assembly) & invoke method
Last Update: 2010/10/17 00:23



Intro




using System.Reflection;//Assembly, MethodInfo
using System.IO;//File

...

String dllPath = @"N:\Common.dll";
String typeName = "Common.Class1";
String methodName = "GetVersion";

Assembly assembly = Assembly.Load(
File.ReadAllBytes(dllPath));
//載入DLL, ReadAllBytes 是避免 Lock 實體檔案

Object obj = assembly.CreateInstance(typeName);
//創建物件實體

MethodInfo method = obj.GetType()
.GetMethod(methodName);
//取得Method資訊

Console.WriteLine(method.Invoke(obj, new Object[] { }));



這算是最簡單的方式唄
不過有個很嚴重的缺點
它無法卸載DLL(Assembly)(參閱 這裡)
你可以開啟工作管理員來檢視
每次執行都會增加一些記憶體

所以我就使用 AppDomain 來加載DLL
就能用 AppDomain.Unload 來卸載



Implementation



試作範例下載

現在有 3 個專案

◆ DynMountDll : 主執行

◆ DynMountDll.TestLib : 被掛載之DLL

◆ DynMountDllLib : interface或稱它為協定吧(WCF好像稱為Contract),被上述兩個專案所參照。




OK, 主要是這個函式
它就是負責掛載Assembly、調用Method、再卸載Assembly(AppDomain)
這幾行,應該滿好理解的
void MountDllInvokeMethod(String dllPath
, String typeName, String methodName)
{
AppDomain myAppDomain = null;
try
{
FileInfo fi = new FileInfo(dllPath);

AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
setup.ApplicationName = "DynMountDll";

myAppDomain = AppDomain.CreateDomain(
"AppDomain01", null, setup);


DynMountDllLib.IBaseLoader obj = 
(DynMountDllLib.IBaseLoader)
myAppDomain.CreateInstanceFromAndUnwrap(
fi.FullName, typeName);

MessageShow(obj.InvokeMethod(methodName, new Object[] { }));
}
finally
{
if (myAppDomain != null)
{ AppDomain.Unload(myAppDomain); }
}

}



我在試作過程遇到的其它問題大致如下

● AppDoman 間的傳遞物件 必須 Serializable 或是 繼承 MarshalByRefObject


● 主要的 AppDomain 並不認識 新的AppDomain 加載的 Assembly
因此,協定(interface)是必要的
AppDomain 和 Assembly 的關係可以參考下圖
AppDomain




順道一提
我這邊的協定只有一個函式 InvokeMethod
它是用來呼叫其它函式的
等於是提供一個進入點(Entry Point)
主要是因為 同組件、不同版本
可能會出現協定中不存在的函式






2010年7月26日 星期一

iPhone-Cocos2d CCSprite Custom Touch Event

CCSprite 自定義觸控事件
Last Update: 2010/07/26 22:31


簡介


我們常用的那個 HelloWorldScene, 是繼承 CCLayer
它是可以註冊觸控事件 (ccTouchBegan...)
如果 CCSprite 本身有自動執行的行為, 並非與場景的互動
或是為了從場景獨立出來, or anything...
同樣的可以為 CCSprite 註冊


前置


環境:
XCode 3.2
Simulator 3.1.3
Cocos2d 0.99.4

準備工作:None

這裡有<主要的程式檔>可以載, 也可依下步驟完成



實作


  • 繼承CCSprite

  • 新增一個類別來繼承CCSprite
    咱們要覆寫 onEnter 及 onExit 來註冊和取消觸控事件
    因此咱們的 h 檔像這樣

    @interface MySprite : CCSprite < CCTargetedTouchDelegate > {
    CCLabel *label;
    }
    @property (nonatomic, retain) CCLabel *label;
    @end

    這裡的 label 是在觸控事件發生時顯示文字給我們看
    CCTargetedTouchDelegate 是實作觸控事件的協定


  • 註冊/取消觸控事件

  • 我們來到 mm檔

    - (void)onEnter{
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:1 swallowsTouches:NO];
    [super onEnter];
    }

    - (void)onExit{
    [[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
    [super onExit];
    }

    注意下 swallowsTouches:no 以及 priority:1
    如果你把優先權設的比場景所屬的觸控事件還高
    又把 swallowsTouches 設成 Yes
    那你的 CCSprite 就會把觸控事件偷偷吃掉, 不告訴你的場景


  • 觸控事件

  • 還是在同一個 mm檔

    - (CGRect)rect{
    CGSize s = [self boundingBox].size;
    return CGRectMake(-s.width / 2, -s.height / 2, s.width, s.height);
    }
    - (BOOL)containsTouchLocation:(UITouch *)touch{
    return CGRectContainsPoint(self.rect, [self convertTouchToNodeSpaceAR:touch]);
    }

    上列程式, 這是為了判定是否點擊到的函式



    - (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{
    if([self containsTouchLocation : touch]){
    [self->label setString:@"Dont touch me"];
    }
    return YES;
    }
    - (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event{
    if([self containsTouchLocation : touch]){
    [self->label setString:@" "];
    }
    }

    這就是我們實作觸控事件的地方



  • 加入場景

  • 在我們最常用的 HelloWorldScene 裡 init 函式 的 if 區段
    用下述代碼覆寫

    CCLabel* label = [CCLabel labelWithString:@"Hello World" fontName:@"Marker Felt" fontSize:64];
    CGSize size = [[CCDirector sharedDirector] winSize];
    label.position = ccp( size.width /2 , size.height/2 + 100);
    [self addChild: label];


    MySprite *sprite = [MySprite spriteWithFile:@"img.png"];
    sprite.label = label;
    sprite.position = ccp(size.width/2, 100);
    [self addChild:sprite];

    只是在原本的Hello World
    加入 已繼承 CCSprite 的 MySprite
    記得把你的圖檔放進專案裡, 順便調整一下位置
    還有引入 MySprite.h 標頭檔

    The End...

    2010年7月25日 星期日

    Cocoa-libxml2 print xmlDocPtr

    印出 xmlDocPtr 指向的文件內容
    Last Update: 2010/07/26 11:16


    xmlChar *buffer = NULL;
    int size = 0;
    xmlDocDumpMemoryEnc(yourXmlDocPtr, &buffer, &size, "utf-8");
    
    NSLog(@"Xml Data: %@", [NSString stringWithCString:(char*)buffer encoding:NSUTF8StringEncoding]);
    
    free(buffer);
    buffer = NULL;
    

    2010年7月21日 星期三

    Cocoa-Other

    NSString

    NSString 2 char
    const char* cString = [nsStringObj cStringUsingEncoding:ASCIIEncoding];
    [nsStringObj UTF8String];


    char 2 NSString by encoding
    [NSString stringWithCString:temp encoding:NSUTF8StringEncoding];


    Join string array to single string
    NSArray * stuff = /* ... */;
    NSString * combinedStuff = [stuff componentsJoinedByString:@"separator"];
    and inverse by [NSString componentsSeparatedByString:]


    =========================================

    exist file
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:somePath];


    =========================================

    是否有相交
    CGRectIntersection


    =========================================

    亂數
    srand(time(NULL));random();
    arc4random


    =========================================

    typeof
    if(typeof([ErrorIDQuestion alloc])==typeof(question))
    f( [[myObject className] isEqual: @"NSString"])

    Cocoa-libxml2 install

    Cocoa-libxml2安裝
    Last Update: 2010/07/22 14:56




    實作



  • Step1. 加入Framework


  • 在專案的Framework目錄按右鍵 -> Add -> Existing Frameworks...



    找到 libxml2. -> Add





  • Step2. 引入標頭檔


  • 專案右鍵 ﹣>GetInfo -> Build頁籤
    在 Header Search Paths 或 User Header Search Paths 添加 /usr/include/libxml2
    Cocos2d 的 Box2d 似乎只能加在 User Header Search Paths, 不知為何 !?



    參考


    http://welcome.totheinter.net/2008/03/11/adding-the-libxml-framework-to-your-iphone-app/

    2010年7月19日 星期一

    Cocoa-Invoking function

    Cocoa-調用函式
    Last Update: 2010/07/19 16:35


    使用NSObject 的 performSelector 來調用函式
    SEL 是一個指標結構,用來儲存函式指標



    typedef struct {
    int code;
    NSString *message;
    }PassingData;
    
    - (void)invokedMethod : (id)sender : (PassingData*)msg{
    NSLog(@"%d : %@", msg->code, msg->message);
    }
    
    - (void)execInvoke : (id)sender : (SEL)method{
    PassingData *pd = malloc(sizeof(PassingData));
    pd->code = 3;
    pd->message = @"QWERT";
    [sender performSelector:method withObject:sender withObject:(id)pd];
    free(pd);
    }
    
    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application 
    [self execInvoke:self :@selector(invokedMethod::)];
    }
    
    

    2010年7月14日 星期三

    iPhone-Cocos2d Progress/Health Bar

    iPhone - Cocos2d 進度 / 血量 條
    Last Update: 2010/07/14 21:18



    前置


    環境:
    XCode 3.2.2
    Compile: Simulator 3.1.3-Debug
    iPhone SDK 4.0
    Cocos2d 0.99.4

    準備工作:
    外框及內部圖片


    實作






    新增Cocos2d專案以後
    將圖片加入Resource

    我們將用 CCProgressTimer 來做進度 / 血量 條
    把下列程式覆寫在 init 函式裡的 if 區段



    CCSprite *spriteBorder = [CCSprite spriteWithFile:@"hp_border.png"];
    spriteBorder.position = ccp(150,150);
    [self addChild:spriteBorder];

    先放個外框


    CCProgressTimer *spriteBar = [CCProgressTimer progressWithFile:@"hp_bar.png"];
    spriteBar.type = kCCProgressTimerTypeHorizontalBarLR;
    [spriteBorder addChild:spriteBar];
    [spriteBar setAnchorPoint:ccp(0,0)];

    .type 選擇水平從左到右
    將 Bar 加入外框的子節點
    並將它 "Anchor" 在(0, 0)的位置
    這樣省了計算外框和 Bar 的關係位置


    spriteBar.percentage = 80;
    CCAction *action = [CCProgressTo actionWithDuration:1 percent:1];
    [spriteBar runAction:action];

    2 種方式變更計量
    直接設定 以及 CCProgressTo (action)




    iPhone-Cocos2d Animation Frame 2

    iPhone-Cocos2d 動畫 (連續圖片播放) part.2
    Last Update: 2010/07/14 20:43

    前置


    環境:
    XCode 3.2.2
    Cocos2d 0.99.4

    準備工作:
    連續圖片


    步驟


    新增Cocos2d專案
    將圖片直接加入Resource
    將 init 函式裡的 Code 用下列程式碼代換
    滿淺顯易懂的, 就不說明了


    if( (self=[super init] )) {


    CCSprite *mySprite = [[CCSprite alloc] initWithFile:@"fox_0001.png"];
    CCSprite *mySprite2 = [[CCSprite alloc] initWithFile:@"fox_0001.png"];


    CCAnimation *walk = [[CCAnimation alloc] initWithName:@"walk" delay:0.1];
    for(int i=1;i<=10;i++){
    [walk addFrameWithFilename:[NSString stringWithFormat:@"fox_%04d.png", i]];
    }


    [mySprite addAnimation:walk];
    [mySprite2 addAnimation:walk];

    //[mySprite setDisplayFrame:@"walk" index:0];
    //[mySprite setDisplayFrame:@"walk" index:1];

    CCAction *action = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:walk restoreOriginalFrame:NO]];
    CCAction *action2 = [CCAnimate actionWithAnimation:walk restoreOriginalFrame:NO];
    [mySprite runAction:action];
    [mySprite2 runAction:action2];


    mySprite.position = ccp(150,150);
    mySprite2.position = ccp(300,150);

    [self addChild:mySprite];
    [self addChild:mySprite2];
    }
    return self;



    2010年7月6日 星期二

    iPhone-Cocos2d Other

    雜項 其它 未整理


    向量:
    ccpLength
    ccpLengSQ
    ccpDistance
    ccSub





    Call function
    CCCallFuncND eventFunc = [CCCallFuncND
    actionWithTarget:self
    selector:@selector(gotoGameScene:data:)
    data:role];
    [eventFunc execute];





    CCSequence, dynamically add action

    +(CCFiniteTimeAction *) getActionSequence: (NSArray *) actions
    {
    CCFiniteTimeAction *seq = nil;
    for (CCFiniteTimeAction *anAction in actions)
    {
    if (!seq){
    seq = anAction;
    }else{
    seq = [CCSequence actionOne:seq two:anAction];
    }
    }
    return seq;
    }








    自定義資料
    CCNode.tag
    CCNode.userData

    2010年6月29日 星期二

    iPhone-Cocos2d Animation Frame

    iPhone-Cocos2d 動畫 (連續圖片播放)
    Last Update: 2010/07/14 20:42


    前置


    環境:
    XCode 3.2.2
    Cocos2d 0.99.4

    準備工作 :
    Zwoptex (官網)
    連續圖片


    建立動畫資源檔案


    以 Zwoptex 製作 .plist 及 .png
    執行 Zwoptex => File => New
    再將所有圖片全選, 拖曳到 Zwoptex 的視窗裡

    點擊Untrim(不自動剪裁)
    選擇適當大小
    Layout -> Apply (自動排版)
    儲存圖片(Texture, 建議png)
    儲存描述檔 ( .plist, 格式為xml, 主要描述各圖檔座標)


    把它們加到專案的 Resource 裡吧
    加入後, 開啟 .plist -> Root -> Frame 可以看到原始圖檔名稱


    接下來的一切動作都只在 init 函式裡


    建立動畫來源


    接著要建立 CCSpriteSheet 及 CCAnimation

    我是以Cocos2d的範本建立專案
    如果什麼都沒做就 Debug 的話應該會看到 Hello World
    我們不需要這個
    請將 init 函式的 if 區塊內容清空
    加入 CCSpriteSheet 的 初始化, 看起來會像下面的程式碼

    -(id) init
    {
    if( (self=[super init] )) {
    CCSpriteSheet *ss = [CCSpriteSheet
    spriteSheetWithFile:@"fox.png"];
    }
    return self;
    }



    緊接著 CCSpriteSheet
    一樣在 if 區塊裡加入下面的程式碼, 將 CCAnimation 建立起來


    [[CCSpriteFrameCache sharedSpriteFrameCache]
    addSpriteFramesWithFile:@"fox.plist"];//Load plist.

    NSMutableArray *animFrames = [NSMutableArray array];
    for(int i = 1; i <= 10; ++i) {//for each frame.
    [animFrames addObject:
    [[CCSpriteFrameCache sharedSpriteFrameCache]
    spriteFrameByName:
    [NSString stringWithFormat:@"fox_%04d.png", i]]];
    }
    CCAnimation *anim = [CCAnimation
    animationWithName:@"walk"
    delay:0.1 frames:animFrames];

    OK, 一行行說吧
    先把 描述檔(.plist)載入

    再將每個 Frame 取出並儲存(for)
    其中的字串 @"fox_$04d.png"
    是圖檔的名稱格式, 它會填入4個數字, 不足補零

    最後我們有了圖檔的座標、大小和順序就可以建立動畫



    連結你的動畫



    CCAction *action = [CCRepeatForever actionWithAction:
    [CCAnimate actionWithAnimation:anim restoreOriginalFrame:NO]];

    CCSprite 要執行什麼動作都必需要依靠 CCAction 來操作
    所以我們將 CCAnimation 與 CCAction 做個連結吧



    CCSprite *sprite =[CCSprite
    spriteWithSpriteFrameName:@"fox_0001.png"];

    CGSize winSize = [CCDirector sharedDirector].winSize;
    sprite.position = ccp(winSize.width/2, winSize.height/2);

    這裡值得提的, 大概是 spriteWithSpriteFrameName
    不再是用一般 Resource 的圖檔, 而是來自 Frame name



    [sprite runAction:action];
    [ss addChild:sprite];
    [self addChild:ss];

    sprite 要執行剛建好的動作(CCAction)
    再將 sprite 加入 ss(CCSpriteSheet), 以連結圖檔
    最後把 ss 加入當前場景即可

    恭喜,執行吧!!

    完整專案下載






    2010年6月22日 星期二

    Add reference library for iPhone

    在 iPhone 專案裡, 加入參考library.

    環境: XCode 3.2.2



    流程



    • 創建靜態library

    • 創建iPhone專案

    • 加入靜態library

    • 同步編譯library

    • 標頭檔(.h)引入






    創建靜態library



    • 1.1 開啟XCode => File => new Project

    • 1.2 選擇專案類型: library => Cocoa touch static library


    • 1.3 輸入 lib 名稱 (ex: MyLib)



    創建iPhone專案



    • 2.1 開啟XCode => File => new Project

    • 2.2 選擇專案類型: Application => View-based Application (請依需求選擇)

    • 2.3 輸入專案名稱 (ex: MyApp)




    加入靜態library




    • 3.1 拖曳 MyLib 到 MyApp (跨視窗)


    • 3.2 會彈出設定視窗, 取消勾選 "Copy Items ...", 並勾選下面的 "Add to targets" 裡的 MyApp, 點擊 "Add"


    • 3.3 在 MyApp 專案裡, 展開剛加入的library, 裡面有個 libMyLib.a, 拖曳到 Targets => MyApp => Link Binary With Libraries





    同步編譯library


    到此算是完成加入參考 lib 的動作, 但它不會自動重新編譯, 因此接下來把它加入相依性吧

    • 4.1 在 MyApp 專案裡, Targets => MyApp 上點擊右鍵 => Get Info => General => Direct Dependencies, 加入 MyLib




    標頭檔(.h)引入



    • 5.1 在4.1的地方, 有個頁籤 "Build" => 搜尋 "Header Search Paths", 加入標頭檔所在路徑
      如果 2 個專案是放在同一個資料夾的話, 可以輸入 "${PROJECT_DIR}/../MyLib"






    參考


    http://www.amateurinmotion.com/articles/2009/02/08/creating-a-static-library-for-iphone.html

    2010年6月13日 星期日

    Install MacOS using Vmware on Windows

    本文純屬興趣測試

    在Windows平台, 使用Vmware安裝Mac OS


    準備工作


    1. Vmware
    2. Mac Os X - Snow Leopard 10.6.2
    3. 導引映像 - darwin.iso (本文用) 或 Rebel EFI.iso



    步驟


    1. 安裝Vmware
    2. 新增虛擬機器(執行Vmware -> File -> New -> Virtual Machine)
    會出現Wizard, 選擇 Typical



  • 預設載入的光碟映像檔, 選擇導引映像(darwin.iso), 可安裝時再設定


    OS 選擇 Other->FreeBSD 64-bit, 等下會修改, 猜測是較接近Mac的配置




    選擇虛擬機器要放哪

    硬碟配置 基本16G, 視個人需求




    3. 修改設定檔
    在你選擇的虛擬機器位置, 以記事本開啟 .vmx
    加入 paevm = "true"
    修改 guestOS = "darwin10"
    存檔, 重啟Vmware

    4. 虛擬機 設定
    你的Vmware虛擬機 -> 右鍵 -> Setting


    移除軟碟 (Click floppy -> Remove)
    光碟改成SCSI (Click CD/DVD -> Advanced.. -> SCSI 選個沒在用的吧)


    Note. 頁籤Options -> General, 可在右邊看到version: Mac OS X Server 10.6 (步驟3的結果, 必要)(汗。_。||)


    5. 導引Mac安裝
    啟動虛擬機(記得掛載導引映像)
    看到 "Please wait for the DVD to load...", 換掛載Snow Leopard, (注意: 需勾選 "Connected")

    按 F8 要求輸入其它安裝選項, 輸入 "-v", Enter (非必要, 只是會跑出啟動的Console)


    6. Mac安裝
    若看到選擇語系的畫面, 就恭喜你囉

    下一步 -> 繼續 -> 同意 -> 選擇安裝磁碟清單是空的? 因為還沒分割和掛載
    上面有個 工具程式 -> 磁碟工具程式...

    點左邊的磁碟 -> 右邊的分割, 會出現分割設定, 選架構(1個分割區), 填名稱 然後套用

    如果沒有自動掛載, 左邊的磁碟按右鍵, 掛載
    關閉磁碟工具視窗
    OK 已經有磁碟了, 點安裝唄, 裝完就可以用了


    後記


    我這邊目前重啟要掛載導引光碟才能進到 Mac OS 裡.



    測試平台1
    CPU : Intel Core2 Quad Q8400 2.66 GHz
    Board : Gigabyte - EP43T-USB3
    Ram : 4 GB
    Display : Nvidia GeForce GTX250
    OS : Windows 7 x86


    測試平台2
    CPU : Intel Core i5 750
    Board : 待查
    Ram : 8 GB
    Display : Nvidia GeForce GTX 275 (SLI)
    OS : Window 7 x64
    備註: 無法用dmg安裝, 轉iso後仍可


    測試平台3 - Notebook: Asus N80Vc
    CPU : Intel Core 2 Duo P8400
    Chipest : Intel PM45 Express
    Ram : 4 GB
    Display : Nvidia GeForce 9300m
    OS : Win Vista x86


    驅動程式下載
    Sound
    VGA


    參考


    http://wiki.osx86project.org/wiki/index.php/Vmware
    http://lingbug.spaces.live.com/blog/cns!F1DDC825780F3571!215.entry