免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 PHP 111
12
最近访问板块 发新帖
楼主: vidarz
打印 上一主题 下一主题

111  关闭 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-05-10 14:32 |只看该作者

主流编程语言未来的趋势?请斧正!

原帖由 "vidarz" 发表:
EasyChen,还有你们团队里面有提到说我们的两个项目在CVS上都是静悄悄的没有动静,所以有人怀疑我们有内部的CVS。

其实是这么一回事,第一个版本我们想完全由我自己们内部完成,之后再来建立一个协同开发的规范,..........


那你们老让看sf的项目首页干什么? 用sf给自己贴金?

我只关心技术 不喜欢看商业炒作 一切等Pob出来就知道了

论坛徽章:
0
12 [报告]
发表于 2004-05-10 14:35 |只看该作者

主流编程语言未来的趋势?请斧正!

原帖由 "EasyChen" 发表:


那你们老让看sf的项目首页干什么? 用sf给自己贴金?

我只关心技术 不喜欢看商业炒作 一切等Pob出来就知道了


因为我们会在上面发布源码包,仅此而已啊。

论坛徽章:
0
13 [报告]
发表于 2004-05-10 14:56 |只看该作者

主流编程语言未来的趋势?请斧正!

原帖由 "vidarz" 发表:


因为我们会在上面发布源码包,仅此而已啊。


不是那么简单吧
sf是全球知名的开源站点,在上边占个叶子就和你在CSDN上发表“技术文章”如出一辙,是典型的广告软文。也就是你们的“市场运作手段”,只是水平不够,做的太假。

--
这里不是im286,既然来了,就谈点实在的技术,别整天来虚的。
把你们的新观点展示展示,库没开发完,设计文档总该有吧?

论坛徽章:
0
14 [报告]
发表于 2004-05-10 15:12 |只看该作者

主流编程语言未来的趋势?请斧正!

EasyChen,你的质询让我感到不安。新的框架模式 http://www.xeam.com/xeam_dev_mode1.gif  就是我们的观点。而周末就可以看到实例,Xeam的工作量是如此巨大,所以Pob的测试版还无法完全用上Xeam的东西。不过架子先出来,大致印象应该有了。是骡子是马到时候也清楚了,希望不会让你失望。

还有文档这块我们一直缺人-:(

论坛徽章:
0
15 [报告]
发表于 2004-05-10 15:57 |只看该作者

主流编程语言未来的趋势?请斧正!

  1. <?php
  2. error_reporting(E_ALL);


  3. define('XMD_ZE2', (function_exists('version_compare') &&
  4.                 version_compare(zend_version(), "2-dev", "ge")));
  5. /**
  6. * 定义操作系统特性
  7. */
  8. if (substr(PHP_OS, 0, 3) == 'WIN') {
  9.         define ('XMD_OS', 'Win', true);
  10.         define ('XMD_DIR_SEPARATOR', "\\");
  11.         define ('XMD_LINE_SEPARATOR', "\r\n");
  12.         define ('XMD_ENV_SEPARATOR', ";");
  13.         define ('XMD_BACKUP_FILENAME', ".bak");
  14.         define ('OS_WINDOWS', true);
  15.         define ('OS_UNIX', false);
  16. } else {
  17.         define ('XMD_OS', 'Unix');
  18.         define ('XMD_DIR_SEPARATOR', "/");
  19.         define ('XMD_LINE_SEPARATOR', "\n");
  20.         define ('XMD_ENV_SEPARATOR', ":");
  21.         define ('XMD_BACKUP_FILENAME', '~');
  22.         define ('OS_WINDOWS', false);
  23.         define ('OS_UNIX', true);
  24. }
  25. //define('XMD_DIR_SEPARATOR', DIRECTORY_SEPARATOR);

  26. /**
  27. * 定义文件目录,默认扩展名
  28. */
  29. define ('XMD_GLOBAL_PATH', dirname(__FILE__));

  30. define ('XMD_FILE_EXTENSION', '.php');

  31. define ('XMD_BASE_PHP_VERSION', '4.3.0');

  32. //===============================
  33. // 定义全局数组变量
  34. //===============================
  35. /**
  36. * 析构器数组
  37. */
  38. $GLOBALS['XMA_DESTRUCTOR_LIST'] = array();

  39. /**
  40. * 退出时执行的函数数组
  41. */
  42. $GLOBALS['XMA_SHUTDOWN_FUNCTIONS'] = array();

  43. /**
  44. * 尝试一种新的用数组方式实现单一模式的手段
  45. * 目前解决方法一般是:
  46. * 1: 在类中建一属性(如 Instance)记录
  47. * 2: 在创建实例的方法中采用静态变量记录
  48. * 根据具体情况我将采用多种方式实现,但主要采用全局数组的方式.
  49. * 有什么好处呢?
  50. * 1: PHP 的数组功能非常强大,完全能够方便的支撑这一手段(不需要使用迭代器等)
  51. * 2: 可以记录附加信息,比如是否需要析构等(我这里是分开的,毕竟需要析构的是很少的)
  52. * 3: 或许可以进行对象替换,代理,认证等高级应用
  53. */
  54. $GLOBALS['XMA_INSTANCE_LIST'] = array();


  55. /**
  56. * include an file
  57. *
  58. * @param        string                $filename        :        file name and path
  59. * @param        boolean                $return                :        is return file's value(TRUE|FALSE        default FALSE)
  60. * @access        public
  61. * @author        bighan <phpminer@21cn.com>;
  62. * @return        filename|FALSE
  63. */
  64. function doInclude($filename, $return = FALSE)
  65. {
  66.         if ($filename = (string)$filename) {
  67.                 $filename = trim(str_replace('/', XMD_DIR_SEPARATOR, $filename));
  68.                 $filename = preg_replace("/\\" . XMD_DIR_SEPARATOR ."{2,}/", '', $filename);
  69.                 if (file_exists($filename)) {
  70.                         if ($return === TRUE) {
  71.                                 return (include_once($filename));
  72.                         } else {
  73.                                 if (!include_once($filename)) return FALSE;
  74.                                 else return $filename;
  75.                         }
  76.                 }
  77.                 return FALSE;
  78.         }
  79.         return FALSE;
  80. }

  81. /**
  82. * Import an file or dir
  83. *
  84. * @param        string                $separator        :        'xx.xx.xx'
  85. * @param        string                $root                :        root path                (default XMD_GLOBAL_PATH)
  86. * @param        string                $extension        :        file extension        (default XMD_FILE_EXTENSION)
  87. * @access        public
  88. * @author        bighan <phpminer@21cn.com>;
  89. * @return        file(s)|FALSE
  90. */
  91. function doImport($separator, $root = XMD_GLOBAL_PATH, $extension = XMD_FILE_EXTENSION)
  92. {
  93.         $separator = explode('.', $separator);
  94.         $space        = $separator[0];
  95.         $name        = array_pop($separator);
  96.         $size        = sizeof($separator);
  97.         $path        = '';
  98.         if ($size >; 0) {
  99.                 for($i = 0; $i < $size; $i++) {
  100.                         $path .= ucfirst($separator[$i]);
  101.                         $path .= XMD_DIR_SEPARATOR;
  102.                 }
  103.                 $path = $root. XMD_DIR_SEPARATOR . $path;

  104.         } else {
  105.                 $path = $root. XMD_DIR_SEPARATOR;
  106.         }
  107.         if ($name !== "*") {
  108.                 if (strcasecmp($space, 'php') === 0) {
  109.                         $fixname = '';
  110.                         for($i = 1; $i < $size; $i++) {
  111.                                 $fixname .= ucfirst($separator[$i]);
  112.                         }
  113.                         $name = $fixname . $name;
  114.                 }
  115.                 $realfile = $path . $name . $extension;
  116.                 if (!include_once($realfile)) return FALSE;
  117.                 else return $name;
  118.         } else {
  119.                 $directory = @dir($path);
  120.                 if (FALSE === $directory)
  121.                         return FALSE;
  122.                 while (FALSE !== ($file = $directory->;read())) {
  123.                         if ($file == '.' || $file == '..' || is_dir($path . $file)) {
  124.                                 continue;
  125.                         }
  126.                         $realfile = $path . $file;
  127.                         if (!@include_once($realfile)) return FALSE;
  128.                 }
  129.                 return TRUE;
  130.         }
  131.        
  132. }



  133. function sentMessage($msg, $target) {
  134. }


  135. /**
  136. * 函数: debug
  137. * 作用: 调试接口
  138. */
  139. function debug($msg)
  140. {
  141.         echo "<br>;============================================<br>;";
  142.         if (is_string($msg)) {
  143.                 echo "<font color=green>;MSG: </font>;$msg";
  144.         } elseif (is_object($msg) || is_array($msg)) {
  145.                 print_r($msg);
  146.         } elseif (is_bool($msg)) {
  147.                 echo "<font color=green>;MSG: </font>; bool", (int)$msg;
  148.         }  else {
  149.                 echo "<font color=green>;MSG: </font>;$msg";
  150.         }
  151.         echo "<br>;============================================<br>;";
  152. }

  153. /**
  154. * register an class instance
  155. *
  156. * @param        object                $object                :        ref object
  157. * @param        string                $space                :        class namespace                (default php)
  158. * @param        string                $alias                :        key nmae        (default empty)
  159. * @access        public
  160. * @author        bighan <phpminer@21cn.com>;
  161. * @return        void
  162. * @see                $XMA_INSTANCE_LIST, getInstance(), #class::newInstance()
  163. */
  164. function setInstance(&$object, $space = 'php', $alias = '')
  165. {
  166.         global $XMA_INSTANCE_LIST;
  167.         if (empty($alias)) $alias = get_class($object);
  168.         $key = $space . '::' . $alias;
  169.         $key = strtolower($key);
  170.         $XMA_INSTANCE_LIST[$key] =& $object;
  171. }

  172. /**
  173. * get an class instance
  174. *
  175. * @param        string                $key                :        key nmae
  176. * @param        string                $space                :        class namespace                (default php)
  177. * @access        public
  178. * @author        bighan <phpminer@21cn.com>;
  179. * @return        object|false
  180. * @see                $XMA_INSTANCE_LIST, registerInstance(), #class::newInstance()
  181. */
  182. function &getInstance($key, $space = 'php')
  183. {
  184.         global $XMA_INSTANCE_LIST;
  185.         $key = $space . '::' . $key;
  186.         $key = strtolower($key);
  187.         if (isset($XMA_INSTANCE_LIST[$key]) && is_object($XMA_INSTANCE_LIST[$key])) {
  188.                 $instance =& $XMA_INSTANCE_LIST[$key];
  189.                 return $instance;
  190.         }
  191.         return FALSE;
  192. }
  193. /**
  194. * get an class instance
  195. *
  196. * @param        string                $key                :        key nmae
  197. * @param        string                $space                :        class namespace                (default php)
  198. * @access        public
  199. * @author        bighan <phpminer@21cn.com>;
  200. * @return        object|false
  201. * @see                $XMA_INSTANCE_LIST, registerInstance(), #class::newInstance()
  202. */
  203. function unInstance($key, $space = 'php')
  204. {
  205.         global $XMA_INSTANCE_LIST;
  206.         $key = $space . '::' . $key;
  207.         $key = strtolower($key);
  208.         if (isset($XMA_INSTANCE_LIST[$key]) && is_object($XMA_INSTANCE_LIST[$key])) {
  209.                 unset($XMA_INSTANCE_LIST[$key]);
  210.                 return TRUE;
  211.         }
  212.         return FALSE;
  213. }
  214. /**
  215. * register an object destructor
  216. *
  217. * @param        object                $object                :        ref object
  218. * @param        string                $methodName        :        run method name
  219. * @param        boolean                $checkHas        :        is check (TRUE|FALSE)
  220. * @access        public
  221. * @author        bighan <phpminer@21cn.com>;
  222. * @return        void
  223. * @see                $XMA_DESTRUCTOR_LIST, callShutdownFunction(), #class::registerDestructor()
  224. */
  225. function registerDestructor(&$object, $methodName, $checkHas = FALSE)
  226. {
  227.         global $XMA_DESTRUCTOR_LIST;
  228.         if ($checkHas && hasDestructor($object, $methodName)) return;
  229.         if (is_object($object) && method_exists($object, $methodName)) {
  230.                 $newItem[0] = &$object;
  231.                 $newItem[1] = $methodName;
  232.                 $XMA_DESTRUCTOR_LIST[] =& $newItem;
  233.         }
  234. }


  235. function hasDestructor($object, $methodName = '')
  236. {
  237.         global $XMA_DESTRUCTOR_LIST;
  238.         $has = false;
  239.         $objectname = get_class($object);
  240.         foreach($XMA_DESTRUCTOR_LIST as $obj =>; $destructor) {
  241.                 $classname = get_class($obj);
  242.                 if (!$methodName) {
  243.                         if (($objectname == $classname) && ($destructor == $methodName)) {
  244.                                 $has = true;
  245.                                 break;
  246.                         }
  247.                 } else {
  248.                         if ($objectname == $classname) {
  249.                                 $has = true;
  250.                                 break;
  251.                         }
  252.                 }
  253.         }
  254.         return $has;
  255. }

  256. /**
  257. * register an shutdown function
  258. *
  259. * @param        array|string        $function                :        if array ->; $function[0] = object
  260. *                                                                                                                 ->; $function[1] = function name
  261. * @param        array                        $args                        :        function args
  262. * @access        public
  263. * @author        bighan <phpminer@21cn.com>;
  264. * @return        void
  265. * @see                $XMA_SHUTDOWN_FUNCTIONS, callShutdownFunction(), #class::registerShutdownFunc()
  266. */
  267. function registerShutdownFunc($function, $args = array())
  268. {
  269.         global $XMA_SHUTDOWN_FUNCTIONS;
  270.         if (is_array($function)) {
  271.                 if (is_object($function[0]) && method_exists($function[0], $function[1])) {
  272.                         $newItem[0] = &$function[0];
  273.                         $newItem[1] = $function[1];
  274.                         $newItem[2] = $args;
  275.                         $XMA_SHUTDOWN_FUNCTIONS[] = $newItem;
  276.                 }
  277.         } else {
  278.                 $XMA_SHUTDOWN_FUNCTIONS[] = array($function, $args);
  279.         }
  280. }

  281. /**
  282. * for register_shutdown_function()
  283. *
  284. * @access        public
  285. * @author        bighan <phpminer@21cn.com>;
  286. * @return        void
  287. * @see                $XMA_DESTRUCTOR_LIST, $XMA_DESTRUCTOR_LIST, register_shutdown_function()
  288. */
  289. function callShutdownFunction()
  290. {
  291.         global $XMA_DESTRUCTOR_LIST, $XMA_SHUTDOWN_FUNCTIONS;

  292.         if (is_array($XMA_DESTRUCTOR_LIST) && sizeof($XMA_DESTRUCTOR_LIST)) {
  293.                 foreach($XMA_DESTRUCTOR_LIST as $destructor) {
  294.                         $object =& $destructor[0];
  295.                         $method = $destructor[1];
  296.                         $object->;$method();
  297.                         //unset($object);
  298.                 }
  299.         }

  300.         if (is_array($XMA_SHUTDOWN_FUNCTIONS) && sizeof($XMA_SHUTDOWN_FUNCTIONS)) {
  301.                 foreach($XMA_SHUTDOWN_FUNCTIONS as $function) {
  302.                         if (sizeOf($function) == 3) {
  303.                                 $object =& $function[0];
  304.                                 $method = $function[1];
  305.                                 $args = implode(',', $function[2]);
  306.                                 eval("\$object->;$method($args);");
  307.                         } else {
  308.                                 call_user_func_array($function[0], $function[1]);
  309.                         }
  310.                 }
  311.         }
  312.         $GLOBALS['XMA_DESTRUCTOR_LIST'] = array();
  313.         $GLOBALS['XMA_SHUTDOWN_FUNCTIONS'] = array();

  314. }

  315. function raiseError($msg = 'error')
  316. {
  317.         debug($msg);
  318.         dieMessage();
  319. }
  320. function throwError()
  321. {
  322. }

  323. function dieMessage($msg = "")
  324. {
  325.         callShutdownFunction();
  326.         die($msg);
  327. }

  328. /*

  329. define ('XEAM_ROOT', phpOption::putEnv('XEAM_ROOT=' . XMD_GLOBAL_PATH, TRUE));

  330. if (!phpOption::currentCompare(XMD_BASE_PHP_VERSION)) {
  331.         trigger_error("You's php version too lower", E_USER_ERROR);
  332. } else {
  333.         define ('XMD_BASE_VERSION_NAME', str_replace('.', '', XMD_BASE_PHP_VERSION));
  334. }
  335. */
  336. doInclude (XMD_GLOBAL_PATH . "/Php/iObject" . XMD_FILE_EXTENSION);

  337. doImport ("Api.Object.CreateObject");
  338. doImport ("Api.Object.newInstance");

  339. //$timer = newInstance("php.util.Timer");


  340. register_shutdown_function("callShutdownFunction");

  341. ?>;
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
16 [报告]
发表于 2004-05-10 18:54 |只看该作者

主流编程语言未来的趋势?请斧正!

上面的代码没有看完,忍不住先说两句。
首先我是比较认同楼主的作法和精神的。
我想冷静的说一句:任何和商业挂钩的作法并不是我们可以肆意贬低甚至是打击的借口,何况楼主的行为并不是商业行为,而是可能存在的一点点市场动作的手段而已。为什么我们支持开源就要诋毁商业的东西呢?钱是实在的东西,相信每个人都没那么“高尚”。

中国自古文人相轻,实在是大大不利于交流和学习。为什么我们不能团结起来一起做点事情,而不是在这里窝里斗?

人外有人,天外有天。我是菜鸟,你们在我面前都是NB的人。呵呵,插嘴一句,不要扔砖头。

补充一句:楼主可能还比较年轻,在措辞和用语上有欠妥当,所以招致口水多多。

论坛徽章:
0
17 [报告]
发表于 2004-05-10 19:26 |只看该作者

主流编程语言未来的趋势?请斧正!

原帖由 "tonera" 发表:
上面的代码没有看完,忍不住先说两句。
首先我是比较认同楼主的作法和精神的。
我想冷静的说一句:任何和商业挂钩的作法并不是我们可以肆意贬低甚至是打击的借口,何况楼主的行为并不是商业行为,而是可能存在的一..........

首先对您的理解表示感谢。
我们是一支很小的技术团队,主要研究方向是PHP。您也许无法想象——我们是全职在做这样的开源项目,希望通过一两年的努力做出一个像样的开发框架,然后基于这个框架所形成的影响力,做一些中小企业级应用程序(同时也是对这个框架的检验)达到继续生存和发展的目的,我们现在虽然对此前景深信不疑,但确是举步维艰。一个小型商业公司花对其来说是很大的投入做开源的开发框架,是有点匪夷所思吧。

我们不得不承认这样一个事实,很多国内做论坛的比做中间件的还有知名度......而既便是好的东西也未必能够迅速做起来,比如我们看过CBB http://www.celestesoft.com/community/  的源码,私下认为这就是一个技术上比较有亮点的论坛程序,但它的名气远远没有Dev和Diz等论坛大,也没有他们这么多的用户。

了解了这一点,再考虑考虑我们的处境,就不难理解我们为什么会“急不可耐”地做前期的宣传了,但是我们决不做有名无实的宣传。如果是光考虑赚钱,我们不如直接做客户或做应用软件而不是开源的框架。所以请相信我们,我们只是喜欢做这样的事情,而相应的市场运作则是为了生存和延续我们所追求的梦想。可能我们的宣传有点幼稚,但是今后我们肯定会有所反思和改进。

论坛徽章:
0
18 [报告]
发表于 2004-05-10 22:41 |只看该作者

主流编程语言未来的趋势?请斧正!

原帖由 "tonera" 发表:
上面的代码没有看完,忍不住先说两句。
首先我是比较认同楼主的作法和精神的。
我想冷静的说一句:任何和商业挂钩的作法并不是我们可以肆意贬低甚至是打击的借口,何况楼主的行为并不是商业行为,而是可能存在的一..........


我想你是没有弄清楚我的话
我绝对不抵制商业,或者说我认为开源就是要靠和商业融合才能发展

今天正好有空 就多说几句

我说的是 楼主根本就不精通商业运作 却偏偏装的很懂
你那些文章放到电脑报上可以 放到技术论坛只会给你们的技术人员丢脸
因为不懂技术的人看起来,是技术,懂技术的人看起来是笑话。

既然大家要谈商业运作 那我就说商业运作

要研究商业推广,可以去看看 中国企业出版社的《实现》


书里边详细分析了脑白金是怎么在缺乏广告费的情况下用软文广告达到目的的。
不过要把那章读懂,脑白金的受众是不懂生物科学的普通人,针对的是人的本能需求,学生物的都是到脑白金是怎么回事。要在技术群体中得到好的效果是很需要技巧的,你看看CSDN怎么炒作DearBook就知道其难度了。

关于Discuz的商业运作,我想我还是比较清楚。
我和C讨论过开源版本和商业版本之间的带动和制约问题;
也一直关注Discuz在网上的推广;
我专门向Boka的老总讨教过Discuz和SE(现在新浪和新网互联的企业建站灵智系统的前身)在企业用户上的推广。
他们的推广入手都是在效用上,而不是概念。

因为现在技术界有一股风气,就是特别恨学术界的弄虚作假,Pob现在被你们拔到那么高,如果不能名符其实,更确切的说,不能像大部分人想象的那样的话,最后会摔的很惨。我想Xeam频繁更新架构和Pob延迟发布多少和这有点关系。

PS下 celest在海外市场的占有率和盈利应该不错,最近似乎也打算回来,中文版和.cn域名都已经准备好了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
19 [报告]
发表于 2004-05-10 23:45 |只看该作者

主流编程语言未来的趋势?请斧正!

这个帖子我暂且锁掉,火药味似乎开始浓了点,而且他们的Xeam在CSDN已经争论过一次,我认为没有必要继续。
我还是那句话,是骡子是马,拉出来遛遛就知道了,大家暂且等他们发布,没看到的东西,也不好多说什么。
Chinaunix 论坛 程序设计 PHP 111
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP