泰山音 – 声乐大师们的失误

六月 12th, 2009 | 2,384 次浏览

泰山音, 专门用来形容歌唱中的破得像人猿泰山的嚎叫声一样破音……………

 

………………………..

 

这篇算是娱乐, 也算是教学. 没有对大师们不敬的意思, 只是希望大家知道人非圣贤, 谁都有失误的时候. 歌唱这条道路是风险和机遇并存的, 既然走上舞台, 就要做好准备面对各式各样的观众, 以及自己可能发生的各种突发状况.

外行的全当看个乐子, 内行的应该可以从中学到些东西.

我自己很喜欢从别人的失误中学习.

全部是从youtube上搜集的.

连接都是Youtube的, 因为最近的封锁, 国内的朋友看不到的话, 我已经把他们都从youtube上扒下来压缩好了放在我网站的服务器上

所有视频打包下载地址:

http://www.k4ng.com/crack.zip

 

1. 这个是卡雷拉斯在歌剧AIDA中Celesta Aida里的破音..破得相当泰山

http://www.youtube.com/v/IZ8WP4YkGY0

 

2. 这个是阿兰尼亚2006年在斯卡拉唱的AIDA, 没有破音, 前面我都听了, 除了让人听着累没有别的感觉, 但是被顶楼的观众轰得很厉害, 阿兰尼亚愤然起身冲观众挥挥拳头下台不唱了… 替补的男高音连服装都没换就给推上来继续唱, 看女高音那不知所措的眼神…很无语. 事后斯卡拉的经理解除了跟阿兰尼亚的合约, 而且说至少那个季度不会再签他.

http://www.youtube.com/v/AxyBxbGF-Qg

 

3. 第三个出场的..Villazon, 这人我不是经常听, 不过据说经常破. 网上经常有人骂, 说他总想学Monaco的声音但是又没Monaco的条件, 所以总破. 这个曼农唱得确实有点离谱, 而且你从他的表演能看出来他知道自己不行了. 0:24开始两个音一共破六下.

http://www.youtube.com/v/jnDTo3d73o4

 

4. 多明戈的在图兰朵第二幕里跟公主和唱High C的破音.

http://www.youtube.com/watch?v=qcSYW5U3EdQ

 

5. 清教徒中High F的破音位置0:22. 不知道谁唱的, 有人知道的话请留个言告知谢谢.

http://www.youtube.com/watch?v=ALtkT99zvBM

 

6. Nicolai Gedda 唱的弄臣中的女人善变, 整个都不错, 最后的B破乱套了.

http://www.youtube.com/watch?v=64BNhZOaINc

 

7. 来一个老帕的, 74年他顶峰时期, 歌剧La favorita里的, 3:13 的时候High C破了, 破完以后旁边一个人乐得贼开心…人啊…. 不过除了这个高音外, 老帕整首的演唱都很完美.

http://www.youtube.com/watch?v=b5EJvwPBMXo

 

8. Franco Bonisolli 的柴堆上火焰熊熊, 最后的High C上的mi直接不知道唱哪去了. 观众轰得很厉害. 这人我不了解, 不过根据网上很多的评论看好像这个人口碑也不怎么样.

http://www.youtube.com/watch?v=vhqQR_qoYqE

 

9. 少见, 男中音破了..听着像是累的..不知道是谁, 有知道的给留个言谢谢.

http://www.youtube.com/watch?v=aALFV3CjuXg

 

10. 这个也不知道是谁, 不过破得真是太泰山了…同上, 有人了解内幕的给留个言

http://www.youtube.com/watch?v=CO4owK3Wvkk

 

11. 这个我不知道是谁..也不知道是啥时候, 但是绝对是非常的无语. 这个女高音就跟喝多了一样在这唱, 整场都这么唱下来的, 观众, 指挥旁边的男高就一直陪着她这么唱…场面非常的恶搞…据体信息都不明, 同上, 了解内幕的给留个言

http://www.youtube.com/watch?v=xXYQvrGn5fY

 

12. 重头戏来了, 这两个视频包括各路名家的失误,

两个视频包括了以下这些名家:

Umberto Grilli, Daniele Barioni, Erna Berger, Pier Miranda Ferraro, Carlo Bergonzi, Simon Estes, Ghena Dimitrova, José Carreras, Roberto Alagna, Luciano Pavarotti, Nicolai Gedda, Rolando Villazón, Anna Netrebko, Franco Bonisolli, Karan Armstrong, Calvin Marsh , Callas

第一部分

http://www.youtube.com/watch?v=5k6c4MBG7h

第二部分

http://www.youtube.com/watch?v=6hZweYnWdAk

刚为兴记餐馆做的网站

五月 15th, 2009 | 988 次浏览

hingston

地址: http://www.hingstonnt.com

暂时只有主页和几个PDF的各式菜单, 具体的今天还要跟老板娘继续商量..

CDU大学无线网络的设置(新来的同学不会设置的请进)

七月 30th, 2008 | 1,826 次浏览

一般新来同学带来的笔记本应该驱动都是装好的, 如果自己有重装过系统的, 请先确定无线网卡的驱动已经装上, 如果找不到的话可以去电脑品牌的官方网站下载, 或者去驱动之家 http://www.mydrivers.com  也可以找到.

我买吃的去, 回来继续写.


好, 继续写.

 

一. 安装补丁

首先安装一个Windows XP的WPA2无线网络补丁.

有些笔记本自带的XP就已经补过这个补丁了, 或者电脑上已经装着Vista系统的同学, 就不需要了, 可以跳过这一步直接去看设置部分了.

这个补丁是用来使XP的无线网络设置支持WPA2标准的, 不补的话也一样可以上, 但是据我个人感觉补过了能稳定一些, 而且据说会增强无线信号(没做过对比测试). 
WPA2 补丁 下载地址:

英文版: http://www.k4ng.com/WindowsXP-KB893357-v2-x86-ENU.exe

中文版: http://www.k4ng.com/WindowsXP-KB893357-v2-x86-CHS.exe

请根据自己系统的语言来选择.

 

二. 设置无线网络

这里讲的设置都是以Windows XP为标准的, Vista的设置也大同小异.

1. 首先断开你当前的无线网络连接(因为设置之前显然是连不上的, 一直连也是白连..)

2. 开始菜单 -> 设置 -> 控制面板 ->  网络连接 在 无线网络连接 上点右键, 点属性. (见图一)

图一

图一

3. 单击 无线网络配置 选项卡, 如果有看到CharlesDarwinStudents 一项, 请单击选中, 然后点 删除. (见图二)

image

图二

4. 然后单击 添加 , 网络名后面写入 CharlesDarwinStudents (无空格, 要一模一样)

网络验证 选择WPA2, 数据加密 选择AES. (图三)

image

图三

5. 单击 验证 选项卡, EAP类型 选择 受保护的EAP(PEAP), 将下面的 当计算机信息可用时验证为计算机 前的勾去掉. (图四)

image

图四

6. 单击 EAP类型右下方的 属性 , 将 验证服务器证书 前的勾去掉. 选择验证方法 安全密码(EAP-MSCHAP v2) 并将下面的 启用快速重新连接 前的勾勾上. (图五)

image

图五

7. 单击 选择验证方法 右侧的 配置, 将 自动使用Windows登录名和密码(以前域, 如果有的话) 前的勾去掉. (图六)

image

8. 点两次 确定.

9. 单击 连接 选项卡, 在 当此网络在区域内时连接 前面打勾. (图七)

image

图七

10. 单击两次 确定. 退出 无线网络连接 属性 窗口.

11. 双击屏幕最下方任务栏的 无线网络连接 图标, 单击 查看无线网络. 再单击 刷新网络列表, 单击 CharlesDarwinStudents (不是CharlesDarwinStaff, 图里点错了)点下方的, 连接 (图八)

image

图八

12. 然后屏幕右下角会出一个小气泡对话框 在它上面单击 (图九)

image

图九

13. 在出现的窗口中输入你的学生号以及你internet access的密码. (图十)

image

图十

14. 等待连接成功.

 

三. 浏览器代理设置

CDU的上网有一个登录脚本代理, 需要手工设置在浏览器里才可以登录外网, 否则只能上校内网络. 这里只讲IE的设置, FF及其它浏览器设置大同小异. (我的IE是英文的..大家凑合看)

1. 打开IE, 单击菜单栏中的 工具 -> Internet选项 -> 单击 连接 选项卡 -> 单击 窗口下方的 局域网设置. 在新出现的窗口中 将 自动检测设置, 使用自动配置脚本都勾选上, 并在地址中填入  http://proxy.cdu.edu.au/  将下方的 使用代理服务器 也勾选上 并在地址中填入 kingfisher.cdu.edu.au 端口 80 (图十一)

image

图十一

2. 单击两次确定, 把Internet 选项窗口关闭.

3. 在浏览器地址栏中 输入 10.0.0.10 回车. 在出现的对话框中 输入你的学生号和上网的密码. (可以把记住密码勾上, 免得以后总要重输) 单击确定, 会提示你 LOGIN Successful! 

4. 到这里, 就大功告成了, 可以开始浏览网站下载软件…了.

 

四. QQ及迅雷代理设置

现在国内应该说几乎没有不用QQ和迅雷的, 所以把代理设置方法也说一下. 这里以最新版本QQ和迅雷为例.

1. QQ

打开QQ, 单击登录窗口处的 设置. 在网络设置中, 类型后面 选择 HTTP代理, 地址后填入 kingfisher.cdu.edu.au 端口 80   之后就可以开始输入帐号密码正常登录了. (图十二)

image

图十二

2. 迅雷

迅雷的设置很简单, 只要之前在IE里设置好代理后, 打开迅雷 单击菜单栏的 工具 -> 使用IE代理 就可以了. (图十三)

image

图十三

 

好了, 到这里基本在CDU大学上无线网络的相关设置就都讲完了, 以后可能陆续会有补充.

如果你忘记了DotnetNuke站点的host和admin密码…

七月 10th, 2008 | 1,737 次浏览

今儿在办公室发生一很无语的事, 有关我的一个DNN(dotnetnuke)项目的. 这个项目是几个月前开始做的, 一个Project Issue Registration System, 后台数据库都已经做完了, 只剩下网站前台, 由于这是个公司的内部项目, 后来的几个网站都是政府还有其它公司的, 优先级比较高, 所以一直在做后来的项目而把这个就一直撂置了, 这几天刚刚把后来的项目都sign off了, 开始有闲, 准备把这个PIRS捡起来做完.

结果把项目打开一运行就傻了, 这是个基于DNN框架的网站, 我把host和admin密码全忘了, 因为当初也是还在开发阶段, 所以根本没设别的用户, 试遍了我自己常用的密码组合, 还有公司的密码组合, 全不行.. 直接无语.  由于host密码不能用密码找回找到, 所以只能走数据库这一步了.

上SQL server, 进去了直奔dbo.aspnet_Membership, 密码是带salt和DNN自己另设的密文加密的, 我头脑一热加手一抖直接把admin和host的密码和salt删了, 然后想用其它站数据库里的密码和salt复制过来, 结果没用, 然后又用hash generator 做了数个加密后的密文+ salt 复制过去, 依然无效. 然后突然想起来,  DNN的加密机制不太一样, 每个DNN站的web.config里自己有个独特的密文, 不同站的不一样, 这一下直接不能上了. 这回事情比原来还严重了, 不仅密码忘了, 原来的密码也没了, salt也没了. -.-|||

OK, 事已至此, 咱上google上找一下先吧, 别自己再乱搞了. 搜索一下, 还真找出不少方案来. 后来才知道, 这些方案在我目前的情况下都不适用, 不过那是后话, 我先把这些解决办法列出来, 方便一下看这篇文章的人.

 

方案一

这个理论上适用于所有情况(但是实际上是痴人说梦..)

  1. 在你DNN网站上注册一个新用户. 如果你的注册按钮被你在站点设置里关掉了, 那就去SQL server上把dbo.Portals表里的UserRegistration值改成2.
  2. 用你开的registration建个新用户(把密码记住.. -.-|||)
  3. 再进数据库, 找到dbo.ASPNet_Membership表
  4. 到你新建的那个用户那一行中把password, passwordsalt的密文都复制到你的host用户那一行的同样列中(host是superuser).
  5. 重新用你的host和你新设用户的密码登录DNN然后再把你新建的那个用户删掉就可以了.

很不幸的是, 我的DNN网站的出于当初开发时的安全考虑被我关闭了, 而且他所说的改UserRegistration值的方法是无效的, 改过后Register依然没有在login module中出现.

 

方案二

这个是需要你已经知道一个帐号的用户名和密码, 然后用下面的SQL query实现对host的密码的替换.

1
2
3
4
5
SELECT password, passwordformat, passwordsalt
FROM aspnet_membership am 
INNER JOIN aspnet_users auON (au.userid = am.userid) 
INNER JOIN aspnet_applications aaON (au.applicationId = aa.applicationid)WHERE au.username = 'admin' 
AND aa.applicationname = 'DotNetNuke'

 

然后把你得到的password, passwordformat, passwordsalt复制到一个地方, 下面的query中从’TestUser’那行开始, 分别对应 用户名, password, passwordsalt, ChangeTime, passwordFormat. 所以你用你刚复制下来的替换下面这几个就可以了.

 

1
2
3
4
5
6
7
8
9
DECLARE @changeDate datetime
SET @changeDate = getdate()
--set the password
EXEC aspnet_Membership_setPassword 'DotNetNuke', 
'TestUser', 
'DM1tZvBjM+27Eck5eI1TWFeG42XuJnMuin3jqFOtMjS83RN6d7dFbQ==', 
'4e5Bb5jOOMYu/JFXVdRmlA==',
@changeDate, 
2

 

那么很不幸的, 这个方案也是无效的因为我根本没有任何一个知道密码的帐号.而且据我所知DNN 4.4.1以后的版本也不再使用Application ID了, 而是使用Application Name. 所以这里也需要做些小修改才能生效.

 

方案三

在SQL server 运行这个query

1
2
3
4
5
6
7
8
9
10
11
12
DECLARE @UserName NVarChar(255)
DECLARE @NewPassword NVarChar(255)
DECLARE @PasswordSalt NVarChar(128)
DECLARE @Application NVarChar(255)
-- 在下面的单引号间输入你要做的修改(用户名, 密码)
-- 别留任何空格除非你特意要留..
SET @UserName = 'admin' -- 这个是DNN默认的admin用户, 这里我们要改成host
 
SET @NewPassword = 'newpassword' -- 这里是你的新密码
SET @Application = (SELECT [ApplicationID] FROM aspnet_Users WHERE UserName=@UserName)
SET @PasswordSalt = (SELECT PasswordSalt FROM aspnet_Membership WHERE UserID IN (SELECT UserID FROM aspnet_Users WHERE UserName=@UserName))
EXEC dbo.aspnet_Membership_ResetPassword @Application, @UserName, @NewPassword, 10, 10, @PasswordSalt, -5

根据这个query来看, 这也是一个DNN 4.4.1以前的方案,但是我做了小量修改, 依然不能在新版本的DNN上有任何效果. 因为他是基于你没有删SALT的基础上的, 而很不幸, 我把密码+SALT都删没了.  失败.

 

方案四

这个是一个老外的query, 无数老外跟着comment了说好用, 但是很不幸, 他的原理是跟方案一相同的, 也需要你有一个已知密码的帐号, 只不过用query的形式完成了.

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
DECLARE @databaseName VARCHAR(128)
SELECT @databaseName = DB_NAME()
 
PRINT 'RESET PASSWORD IN DATABASE : ' + @databaseName
PRINT '-----------------------------' + REPLICATE('-', DATALENGTH(@databaseName ));
 
DECLARE @knownUserName NVARCHAR(128)
DECLARE @lostUserName NVARCHAR(128)
DECLARE @lostUserId NVARCHAR(128)
DECLARE @knownPassword NVARCHAR(128)
DECLARE @knownSalt NVARCHAR(128)
 
SET @knownUserName = 'Tonic'
SET @lostUserName = 'host'
 
SELECT @knownPassword = Password, @knownSalt = PasswordSalt
FROM aspnet_Membership
INNER JOIN aspnet_users
ON aspnet_Membership.UserId = aspnet_users.UserId
WHERE UserName = @knownUserName;
 
PRINT ''
PRINT 'Known Password for "' + @knownUserName + '" is : ' + @knownPassword
PRINT 'Known Password Salt for "' + @knownUserName + '" is : ' + @knownSalt
 
SELECT @lostUserId = aspnet_Membership.UserId
FROM aspnet_Membership
INNER JOIN aspnet_users
ON aspnet_Membership.UserId = aspnet_users.UserId
WHERE UserName = @lostUserName;
 
PRINT ''
PRINT 'UserID for "' + @lostUserName + '" is : ' + @lostUserId
PRINT ''
 
IF (DATALENGTH(@lostUserName) <= 0 OR @lostUserName IS NULL)
PRINT 'Invalid Lost User Name ' + @lostUserName
ELSE BEGIN
IF (DATALENGTH(@knownUserName) <= 0 OR @knownUserName IS NULL)
PRINT 'Invalid Lost User Name ' + @lostUserName
ELSE BEGIN
IF (DATALENGTH(@knownPassword) <= 0 OR @knownPassword IS NULL)
PRINT 'Invalid Known Password ' + @knownPassword
ELSE BEGIN
IF (DATALENGTH(@knownSalt) <= 0 OR @knownSalt IS NULL)
PRINT 'Invalid Known Salt ' + @knownSalt
ELSE BEGIN
PRINT ''
PRINT 'BEFORE'
SELECT LEFT(UserName, 12) AS UserName, aspnet_Membership.UserId, LEFT(Email, 20) AS Email, Password, PasswordSalt
FROM aspnet_Membership INNER JOIN aspnet_users ON aspnet_Membership.UserId = aspnet_users.UserId
WHERE UserName IN ( @knownUserName, @lostUserName );
PRINT ''
PRINT 'Changing Password for User Id : "' + @lostUserId + '" to "' + @knownPassword + '"'
PRINT ''
UPDATE aspnet_Membership
SET Password = @knownPassword,
PasswordSalt = @knownSalt
-- SELECT UserId, Password, PasswordSalt
-- FROM aspnet_Membership
WHERE UserId = @lostUserId;
PRINT ''
PRINT 'AFTER'
SELECT LEFT(UserName, 12) AS UserName, aspnet_Membership.UserId, LEFT(Email, 20) AS Email, Password, PasswordSalt
FROM aspnet_Membership INNER JOIN aspnet_users ON aspnet_Membership.UserId = aspnet_users.UserId
WHERE UserName IN ( @knownUserName, @lostUserName );
END
END
END
END
GO
PRINT '' PRINT ' * * * END OF SCRIPT * * *' PRINT '' GO

显然, 前面已经提过, 我没有一个现成的知道密码的帐号, 所以再次失败.

方案五

由于我之前的失败都因为没有一个可以工作的而且知道密码的帐号, 而又不能在网站上注册新帐号, 于是我找到了一个方法可以用SQL创建一个新帐号.

query如下

 

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
SELECT m.password, m.passwordsalt, m.passwordformat
FROM aspnet_users u
    INNER JOIN aspnet_membership m
        ON (u.userid = m.userid)
WHERE u.UserName = 'TestUser'
SELECT PortalId,
     PortalName
FROM Portals
DECLARE @ApplicationName nvarchar(256)
SET @ApplicationName = 'DotNetNuke'
DECLARE @UserName nvarchar(256) 
SET @UserName = 'NewUser' --The new user
DECLARE @Password nvarchar(128)
--From the existing user
SET @Password = 'LLSXX8xW6+0EbrV4JBzL/YenA1D6BBfRnkYY7FtQvNGmmPOhVdPiAA=='
DECLARE @PasswordSalt nvarchar(128)
--From the existing user
SET @PasswordSalt = 'P40ky5tExsx37nUIFnCWZQ=='
DECLARE @Email nvarchar(256)
SET @Email = 'TestingAccount@test.com' --You can set this to whatever you want
DECLARE @PasswordQuestion nvarchar(256)
SET @PasswordQuestion = ''
DECLARE @PasswordAnswer nvarchar(128)
SET @PasswordAnswer = ''
DECLARE @IsApproved bit
SET @IsApproved = 1
DECLARE @CurrentTimeUtc datetime 
SET @CurrentTimeUtc = GETDATE()
DECLARE @CreateDate datetime
SET @CreateDate = @CurrentTimeUtc
DECLARE @UniqueEmail INT
SET @UniqueEmail = 0
DECLARE @PasswordFormat INT
SET @PasswordFormat = 2 --NOTE: Value from existing user!
DECLARE @PortalId INT
SET @PortalId = 0    --The id of your portal
DECLARE @UserId uniqueidentifier
DECLARE @DNNUserId INT
 
--Make the stored procedure call
EXEC dbo.aspnet_Membership_CreateUser @ApplicationName, @Username, @Password,
                @PasswordSalt, @email, @passwordquestion, @PasswordAnswer, 
                @IsApproved, @CurrentTimeUtc, @CreateDate, @UniqueEmail,
                @PasswordFormat, @UserId
 
--Insert the record into the DotNetNuke users table
INSERT INTO users (Username, FirstName, LastName, IsSuperUser, Email,
                    DisplayName, UpdatePassword)
    VALUES(@Username, 'My', 'NewAccount', 0, @Email, 'New Account', 0)
 
--Get the new userid, from the DNN users table
SELECT @dnnuserid = userid
FROM Users
WHERE username = @Username
 
--Now, insert the record into the user portals table
INSERT INTO UserPortals (userId, PortalId, CreatedDate)
    VALUES(@dnnuserid, @PortalId, GETDATE()) 
 
--Now Give the user permissions to the RECISTERED Users group
INSERT INTO UserRoles (userId, roleId)
SELECT @dnnuserid,
        roleId
FROM Roles
WHERE RoleName = 'Registered Users'

然而我不得不再次不幸的告诉大家, 从这个query来看, 要使用这个query建立一个DNN新用户, 也是需要事先有一个知道密码, salt, applicationname的帐户才可以的, 可悲的是我的密码和salt密文已经被我完全删干净了. 再次失败.

 

成功方案

 

经过了这数次失败以后, 我终于放弃google了, 看来这次真的无法找到我要的答案, 既然数据库方向我无法找到结果, 那么只能从代码上动手脚了, 不就是想注册新用户么, 我开始找login module的code.

image 

DNN的这个目录下存放着login module的代码, 打开后开始查找对portal setting里Userregistration属性的判定, 经过一翻查找和测试, 总算找到了, Page_Load里面的这一段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            If Not Request.IsAuthenticated Then
                If Page.IsPostBack = False Then
                    Try
                        If Not Request.QueryString("username") Is Nothing Then
                            txtUsername.Text = Request.QueryString("username")
                        End If
                        If Not Request.QueryString("verificationcode") Is Nothing Then
                            If PortalSettings.UserRegistration = PortalRegistrationType.VerifiedRegistration Then
                                ' Comment this line above and the "End If" below out if you can't login as admin or host 
                                '   and can't change the register setting in SQL and don't even have an password-known account 
                                '   and really really desperatly want to register a new user.   -- Kang 10.07.2008
 
                                'Display Verification Rows 
                                rowVerification1.Visible = True
                                rowVerification2.Visible = True
                                txtVerification.Text = Request.QueryString("verificationcode")
                            End If
                        End If
 
                    Catch
                        'control not there 
                    End Try
                End If

这段代码中的comment是我加的.. (当时实在很无语), 判定网站是否开放注册的部分就是其中If PortalSettings.UserRegistration = PortalRegistrationType.VerifiedRegistration Then 和下面的End IF这两行, 我把他们前面加个’ 给comment掉再重新编译运行网站,  register就出来了, 之后我把自己新注册的用户在数据库中的superuser设成true(dbo.Users表里面), 然后用这个帐号登录DNN, 把host和admin的salt随便写一个在数据库里加上, 再把他俩的密码reset, 然后重新change password为我想要的, 大功告成. 本来也可以用上面几个方案中给出的换密码的办法, 不过看了这么久的query我实在不想再弄了, 直接去万恶的DNN后台里改了.

希望对跟我一样犯了愚蠢错误的DNN开发人员有所帮助.

真的很长啊, 谢谢观赏.

Multiple IE – 使多版本IE共存

六月 28th, 2008 | 2,515 次浏览

做网站时候经常有些客户要求网站compatible with很多版本的IE, safari, FF, 但是正常来说IE只能装一个版本,装新版时候就会自动更新, 把原来的版本抹掉,IE现在已经更新到IE 8 beta, 可大多政府学校机构还在使用IE 6(万恶的IE6……)  而偏偏由于IE本身对CSS/ javascript解释的问题, 网页在不同版本的浏览器, 甚至不同版本的IE中都有不同的样子…. 为了方便测试, 几乎每个网站开发人员都想过多个IE一起装进电脑里并存吧…(有的客户甚至要求网站跟IE5也兼容…-_-) , 于是这个叫Multi-IE的软件就在几个老外的努力下诞生了. 软件里包括了IE3-6, 由于新版IE 8 Beta有模拟IE 7的功能, 所以IE 7暂时没有列入其中.

软件使用很简单, 下载后安装, 选择想要的IE版本既可. 值得注意的是IE developer toolbar在Multi-IE的IE6里是不会工作的, 只会在你正常安装的当前版本IE里工作, 如果实在想在IE 6里用IE developer toolbar, 那唯一的办法貌似就是在virtual machine里全新安装一个win XP, 不要更新其中的IE, 在其中安装IE developer toolbar然后进行调试了. 而有时Multi-IE中的IE也会无故crash…比如我上一个项目里做的javascript的渐变图像, 有时在IE 6 中鼠标无意双击, 就会导致crash…-_- 另外这个软件包跟Vista不兼容, 不过目前没有多少开发人员在用Vista吧, 如果实在想在Vista下使用IE 6的话, 我稍后会发一篇Vista下安装IE 6的指南.  虽然有些不完美的地方, 但暇不掩玉, 这个软件实用性还是很强.

软件的安装界面如下:

image

安装后的效果:

image

下载地址: Multiple IE Installer (10.3MB)

正版DVD电影转刻至一般DVD+转换为RMVB视频文件+字幕不完全手册(整合了所有相关工具本地下载, 免得大家到处找了)

六月 12th, 2008 | 4,046 次浏览

最近弄了很多正版碟回来想COPY下来收藏, 但是一般的DVD空盘只有4.7GB容量, 根本装不下100%画质的一般正版DVD电影, 只能视电影长度适当减少画质. Double Layer的大容量DVD又太贵, 不符合广大人民群众对性价比的狂热需求. 我通常的做法是降低画质, 去掉不必要的special features (幕后花缀,删剪镜头etc…), 然后转入普通的DVD空盘. 但是最近发现转成RMVB存硬盘or移动硬盘其实也是不错的方法, 在节省空盘的同时也可以降低光驱的磨损(每次看碟都要磨损光驱的). 经常过几天的查阅资料和尝试, 就来讲下心得体会和具体操作.

 

据我所知还有很多朋友不知道如何copy正版DVD电影, 关键是找不到正确的软件, 所以第一部分先讲一般正版DVD电影转刻的方法.  因为正版的DVD上都有区域码限制和一堆乱七八糟的加密(本着本篇文章注重实效的原则, 我就不讲都是些啥乱七八糟的加密了), 所以需要一些特殊的软件来把他们去掉, 才能对其进行复制, 我试用过很多软件, 最好用的就是AnyDVD配合CloneDVD.

下载地址:

AnyDVD 6.3.1.5 : http://www.fmdemise.com/SetupAnyDVD6315.exe

AnyDVD 6.3.1.5 破解补丁: http://www.fmdemise.com/AnyDVD_6.3.1.5_RES.rar

(破解方法: 把AnyDVD 装上 ,然后把破解补丁里的AnyDVDtray.exe复制进安装完的目录里复制原文件)

 

CloneDVD2 2.9.1.5 : http://www.fmdemise.com/SetupCloneDVD2915Slysoft.exe

CloneDVD2 2.9.1.5 破解补丁: http://www.fmdemise.com/SlySoft.CloneDVD.v2.9.1.5.Final.rar

(破解方法: 破解补丁里有N多keygen什么的, 随便找一个破解就行了)

 

以上两个版本的软件基本可以应付现在所有的正版DVD, 如果你要复制的太高科技, 实在没办法破解其加密的话, 那就去 http://www.anydvd.com  下载最新版的AnyDVD和CloneDVD , 然后自己上网上找破解吧, 一般是找不到最新版的破解补丁的, 其实付钱也没啥不行的, 两个软件加一起好像是100美刀左右, 就终身免费升级了.

 

打开AnyDVD的Anydvdtray.exe, 软件会在后台运行, 任务栏上多出一个小狐狸的图标, 当你把正版DVD光盘放进去以后, anydvd会去掉他的各种加密, 以及区域码. (这里有个例外, 我在之前的文章里有讲述, 一种特定牌子特定型号的光驱, 区域码无法通过软件破解, 所以有这种光驱的人就倒霉了, 买个新的吧). 这时候这张光盘就像普通的DVD一样可以随意复制了, 于是再打开CloneDVD2.

image 再点image选择光盘里的video_ts文件夹. 会出现如下画面:

image

左边的下拉菜单里, 如果你想把这张盘复制到double layer的盘里, 就选择DVD+/-R DL , 一张double layer的盘可以以100%画质复制下任何的整张正版DVD, 当然一般我们是将其复制进普通的4.7GB DVD光盘里, 所以选择自定义, 并调整容量为4700MB , 右边会显示当前的设置下能够达到的画质, 如果想高一点画质, 就把除了主视频外的其它文件都勾选掉

image

去掉这些除了主视频以外的东西后, 画质居然达到100%了  (-_-|||).. 其实不到100%也没关系, 60%-100%之间都是可以接受的画质.

调整满意后, 点下一步,在这里设置想要保留的字幕语言和音频, 我通常是留dolby 六声道的主语言(因为这是个正版英文电影, 所以只有English, 没得选). image

image

在这里如果去掉你不想要的字幕和音频, 也是可以提高画质的.

再点下一步

image

这里CloneDVD是先将整张DVD复制进硬盘中, 然后再刻录至你的DVD里, 所以这里要选择你想存入的文件夹, 如果上面你选的是DVD +/- R DL, 那么要保证你硬盘里还有6.5G以上的剩余空间, 如果是选的自定议, 4700MB, 则要保证你硬盘里还有4.7G以上的剩余空间.  再点击 执行  , 复制就开始了. 需要的时间通常是10几分钟至40几分钟不等, 根据你光驱的速度还有你电脑的速度而定, 复制成功后会有一阵巨傻二的音乐传出来. 点确定就行了. 然后把原版电影拿出来, 把你准备好的空盘放进光驱. 点 重新开始, 然后点

image

来源里把你刚才的copy电影的文件夹选上, 卷标里写上电影的名字(或者你想写啥都可以, 不影响). DVD刻录机里选上你要用的刻录机. 点 执行,  就开始了.  同上面一样, 需要的时间通常是10几分钟至40几分钟不等, 根据你光驱的速度还有你电脑的速度而定, 刻完了会有一阵巨傻二的音乐传出来, 你就知道完事了.

讲完怎么把正版电影DVD翻刻到普通DVD上, 最爽的部分就开始了, 下面来讲讲怎么把正版电影DVD转刻为RMVB文件+字幕.

网上有很多很多讲这个的文章, 很乱套, 我试了很多, 现在来讲讲自己总结的方法.

应用软件: SmartRipper, Elecard MPEG-2 Decoder&Streaming Plug-in for WMP 3.6.80523, VobSub, Easy RealMedia ProducerV1.94, 影音风暴Storm Player(和暴风影音完全两回事, 别混了)

下载地址:

SmartRipper : http://www.fmdemise.com/SmartRipper 2.41.zip

Elecard MPEG-2 Decoder : http://www.fmdemise.com/EMPG2_Dec_Strm_Pack.zip

VobSub : http://www.fmdemise.com/VobSub_2.23.exe

Easy RealMedia Producer : http://www.fmdemise.com/ermp_full.exe

Storm Player : http://download.verycd.com/StormPlayer.exe

 

首先安装Elecard MPEG-2 Decoder&Streaming Plug-in for WMP 3.6.80523 这个解码器+插件, 然后依次把Smart Ripper, Vobsub, Easy realmedia producer和Storm Player都安装上. 打开AnyDVD(安装后Anydvd通常就是开机自动启动了), 把要复制的电影DVD放进光驱, AnyDVD会自动去除区域码和光盘加密, 打开Smart Ripper. 它会自动开始检查光盘, 解密, 去码(AnyDVD已经帮它做完了, 有很多光盘SmartRipper不能解密, 这就是为什么要 AnyDVD配合) 检查光盘内各个文件的可读性.

image

成功后会显示如下画面

image 以及程序的主窗口

image

这里要做一些小的调整. 先点Stream Processing,

image

如果是老手就按自己想要的选择吧, 其实跟CloneDVD是一样的, 新手的话就点右边的all, 都选上吧.

再点左边的image

 image

在这个窗口里, 因为有anyDVD进行解密在key-check下选don’t decrypt, File-splitting里选max-filesize, 并把max-filesize改为8000MB, 这样转换下来的电影都在同一个VOB文件里, 不需要二次合并, 方便转换为rmvb文件. 再点上面的Files/Backup

image

在这里选择Key-check下的don’t decrypt, 跟上面一个道理.

其余的都不动, 点OK.

这样设置就算结束了, 其它的都不需要动 点 image 开始复制.

 

image

Remaining后面是预计的剩余时间, 根据你光驱的速度会有所不同, 比如我这个破光驱就得40分钟, 借的朋友的新外挂光驱就10分钟就行了. (囧….)

然后打开Easy Realmedia Producer

image

点添加, 把刚刚转换完的VOB文件选中.  单击添加的文件, 点 参数设置.

image

这里把动态码率改成2440kbps, 视频质量调为100%, 视频编码RealVideo 9, 过滤设置里选上调整画面大小, 通常现在的DVD都是16:9的画面了, 所以调整画面大小为854 x 480, 并选上 高质量调整画面大小.  在剪辑信息里写上电影标题和制作人(其实爱写不写..无所谓). 这样一般的电影转出来大概有1-2G左右, 但是画质非常好, 跟DVD也差不多, 不过有的朋友可能喜欢小的, 那就按自己喜好调整就可以. 这里点确定, 就算设置完毕了. 有的文章里有讲把字幕和视频文件压在一起, RMVB视频出来就带自幕, 我个人觉得不喜欢, 因为有时候大家想看中文字幕, 但是有时候想只看英文字幕做学习用. 或者有时候干脆不想看字幕, 我这里的做法是直接转换时候就不带字幕, 然后播放时再让storm player自动外挂字幕. 这样可以自己选择, 关于字幕的问题下面会细说.

下面点 开始压缩, 程序就会开始将VOB文件转换为RMVB视频格式了. 大概要一两小时的时间, 视电影长度而定, 且转换过程中会有电影中的声音伴随, 而且是所有语言一起讲的, 不过不用担心, 转出来的RMVB文件只会是默认语言的音频, 英文就英文, 中文就中文. (英文电影还是听原声吧, 中文配音的实在扯, 就像看功夫之王里一帮傻二在古中国讲英文一样郁闷.. ) . 听它叽哩哇啦响一两个小时以后, 就转换完了. 这时候的RMVB视频已经算是可以看了, 只不过没有字幕.  下面有两个办法得到字幕, 一个是从电影里用vobsub的vobsub configure提取字幕ifo文件里的字幕.

打开vobsub里的vobsub Configure组件

image

点Open, 打开转换出来的主电影视频匹配的ifo文件(文件名是一样的, 记着这里vob文件, ifo文件要都在一起, 否则会无法转换)

然后选择一个另存的位置, 就选你放电影的文件夹吧.

之后出现如下窗口:

image

在这里把不想要的字幕都按<– 导到左边Program Chain no.1下面去, 其它的不用动.

点OK就可以了.

程序会先find key

image

然后index

image

indexing大概需要几分钟的时间, 之后会生成.idx和.sub两个文件, 将其文件名都改为rmvb视频文件的文件名, 这样用storm player播放时, 会自动调用.

另外一个办法是去射手网 http://www.shooter.cn 下载你的电影的字幕,一般我会选项下载srt格式的, 并且看好要不分段的(一般电影的应该都能在射手网上找到). 然后文件名也改成RMVB文件的文件名就可以了.

 

但是有时候会遇上一个问题, 有时候字幕和声音对不上, 快了或者慢了, 这里就要用到vobsub的一个叫subResync 的工具了. 播放器里只能调整加快或者减慢字幕自动调用的速度, 但是只有这个通常是不够的.

先播放视频文件, 记下第一句需要字幕和最后一句需要字幕的地方的时间(精确到秒)

然后用subResync打开你下载的或者转换出来的字幕文件

image

这里unlink一定不要选上, 否则程序不会自动整体调校.

image

在第一句和最后一句字幕上点右键, 其前方的白色圆圈会变为绿色, 然后在绿色圆圈后的时间上单击左键, 把时间改为你刚才所记下的时间, 点 Save As, 把字幕另存为一个文件. 再将原来的字幕改为其它名字, 将新做好的字幕文件改为rmvb视频文件的名字.

再用Storm Player打开rmvb视频看看, 字幕应该就已经都能吻合了.

 

**关于更多的Storm Player播放时的字幕问题, 比如改文件名后字幕仍然不加载等等, 请参考Storm Player官方讨论组的这个贴子: http://www.verycd.com/groups/StormPlayer/93042.topic

 

 

好, 到这里就算大功告成了. 

 

 

 

谢谢观赏. 

The End.

del.icio.us Tags: ,,,,,

IE 8 beta vs. Firefox 3 vs Safari 3.1.1

五月 30th, 2008 | 1,327 次浏览

说实话, 对一个网站开发人员来说, 最头疼事情之一的就是网站代码与各个不同版本浏览器的兼容性了, 现在市场上浏览器主流的虽不多, 但是设置和解释代码的方式却各不相同, 着实很烦, IE 7 , IE 6/5.5,  FF 2/3, Safari, Opera…..  等等 经常在写CSS的时候为了能让网站在这些主流浏览器中看起来一模一样, 而写各种各样的所谓 "HACK", 见过很多抓狂了的老外程序员甚至在CSS的comment里面就出言讽刺IE (实话实说.. IE确实很无语, 尤其是IE 6及以下版本, 连PNG图象都不支持, IE 7 明里说支持, 其实有些时候也会出问题, 说到PNG..更无语了, 又是另一个无穷HACK的故事…) 比如什么.."/*Holy SUPER HAAAACK for our BELOVED IE 6"  . IE 系列有很多问题, 尤其是老版本IE 6 ,不支持纯css的下拉菜单, 不支持PNG图像的半透明效果, 都要靠各种hack, fix 来实现.  但偏偏现在很多的政府部门还有私人大多都在使用ie 6  让人不胜其烦…

好了, 言归正传, 来谈谈我们今天的三大主角..  都是最新版本的主流浏览器, IE 不用说了, 广大群众的最爱, FF则是天才少年的作品, 现在有Mozilla 撑腰, 简洁高效, 我的最爱 =P. Safari 则是苹果机上的标准浏览器, 大多搞图形,影视, 音频的人老外都用这, 再就是苹果机在国外类似一种文化, 虽然性价比不高, 但是却总是有那么一批固定用户群, 于是safari也是不可忽视. 如何让网站在这些不同标准下兼容而正常工作, 就是个问题.

再来讲下现在一个很著名的acid 测试, 本文中将要用的是acid 2 和acid 3, acid 2 可以说主要是一个css 测试, 用来检查浏览器是否能够正确的以标准方式解释CSS代码, 而acid 3 则主要是一个javascript测试.

acid 2 和 acid 3的网址分别为

acid2: http://acid2.acidtests.org/

http://www.webstandards.org/files/acid2/test.html

acid3: http://acid3.acidtests.org/

先从ACID 2 开始,

image   这是acid2 的标准结果图, 出现这个图 代表该浏览器已通过测试.  如果有一丝不同, 便是FAIL.  =.=|||

先来看FF和Safari.

FireFox3: image  Safari 3.1.1: image

IE 8 beta 自称通过了ACID 2 测试, 但是这里却出了点小问题.

如果登录http://www.webstandards.org/files/acid2/test.html 这个地址来进行acid 2 测试, 则IE 8 的图示如下

image

但若是通过http://acid2.acidtests.org/ 这个地址进行测试, IE 8 则完完全全的是FAIL…如图

image

至于这个问题… 微软的Phil Nachreiner同志进行了解释. 据他所说 由于两个地址中的测试代码是一样的, 所以不存在因代码不同而使IE 8无法通过其中一个测试的说法, 而是因为IE 8 beta中本身的一个cross domain security设置, 而在acid2测试的代码中有object tag (去网站看源码就知道我在说啥了) , 而本身ie 8 beta对object tag 一类的解释方式有所不同, 其实是因为不同域名而导至的测试失败, 却不是IE 8  本身代码编译标准的问题.

好吧..至此 IE 8 beta, Firefox 3, Safari 3.1.1 都通过了acid 2 测试. CSS民工们可以欢呼了. 俺们迎来了互联网一个全新的时代..&$!^!#%^$!,….

 

切慢..

 

话说Acid2后..还有个ACID3测试呢… ( -.- |||)  ,专门给浏览器javascript挑刺儿的…(多亏了这些挑刺儿的….)

这是ACID 3 的标准图

image

开始吧 事先说明吧, acid3 要拿 100/100分才算pass, 具体说明去网站一看便知, 而这三个浏览器.. 嗯, 没有一个通过的.

Firefox 3: image

Safari 3.1.1 : image

重头戏来了, 看我们伟大的IE 8 …

image

这是多少分我都看不见….不过据同事讲, 他们前几天做测试时是17分.. (成吉思汗 – -|||)

据说IE 5.5 在ACID 3里都比IE 7/8 分高…

 

测试结束…废话不用多说了, 于是 CSS民工们欢呼吧.. js 民工们.. IE 8 beta版便是这样了.. 希望正式版能好起来, 不然新版IE 给js同志们不仅带不来解脱…还得带来更多的BUG 也就是更多的痛苦… = =.