woshiwppaa woshiwppaa
经验丰富的Java/安卓开发专家
关注数: 19 粉丝数: 125 发帖数: 1,384 关注贴吧数: 15
MFP语言并行计算编程指南 MFP语言对并行计算的支持是通过call ... endcall程序块来实现的。大体流程是: 1.在客户端和服务端分别调用generate_interface函数建立通信界面; 2.服务端调用initialize_local函数监听客户端的连接请求; 3.客户端调用connect函数连接到服务端,该函数返回一个连接对象; 4.客户端将一个call ... endcall程序块,以及所有相关代码,资源文件和整个程序栈的拷贝,发送到服务端。call语句的第一个参数就是connect函数返回的连接对象; 5.如果有需要,客户端继续发送更多的call ... endcall程序块到服务端; 6.服务端接收到客户端的call ... endcall程序块和相关信息之后,为该程序块建立一个独立的沙盒。该沙盒拥有完整一套所在设备的MFP系统库,但是自己用户代码库和用户资源库则是独立的。程序块所在的代码文件和程序块调用的用户代码所在文件会保存在沙盒的用户代码库目录下,所需要的资源文件会保存在沙盒的用户资源库目录下。在服务端,会有多个MFP沙盒在同时运行。由于各个MFP沙盒的程序栈,用户代码库和用户资源库都是独立的,各个MFP沙盒之间不会相互影响,沙盒和MFP服务端本地程序也不会相互影响。 7.服务端运行call ... endcall程序块中的代码之后,通过return语句返回结果。返回的结果将赋值到位于客户端的endcall语句的唯一的参数上。如果endcall没有参数,返回的结果将会被忽略。反过来,如果call ... endcall程序块中的return语句没有返回值,而endcall有一个参数,该在客户端参数的值不变; 8.在客户端,如果代码尝试读取endcall语句的参数变量的值,而这时服务端还没有返回结果,代码将会阻塞,直到服务端返回结果,代码继续运行; 9.如果客户端想关闭连接,可以调用close_out_connection和close_local函数。如果服务端也调用close_local函数,意味着服务端无法监听其它任何客户端的请求。
如何通过可编程科学计算器在另一个设备中运行本机MFP语言编写的 MFP语言的一个重要功能就是通过call ... endcall语句实现对并行计算的支持。MFP语言实现多线互不干扰并行计算的基本原理是采用沙盒机制。每一个MFP沙盒拥有完整一套所在设备的MFP系统库,但是自己用户代码库和用户资源库则是独立的,服务端会为一个从客户端传来的call程序块建立一个MFP沙盒。程序块所在的代码文件和程序块调用的用户代码所在文件会保存在沙盒的用户代码库目录下,所需要的资源文件会保存在沙盒的用户资源库目录下。各个MFP沙盒的程序栈也都是独立的。这样就保证了各个MFP沙盒之间不会相互影响,沙盒和MFP服务端本地程序也不会相互影响。 在帮助中已经有call ... endcall语句的详细例子,但是那是客户端设备发送一段算法去服务端设备。如果客户端想要发送一个游戏去服务端设备并在服务端设备运行,该如何实现呢? 游戏和普通算法的区别在于,游戏需要支持视频和音频,所以有很多资源文件(比如,图像文件,数据库文件,声音文件等等)。在其他方面,游戏和普通算法是一样的。所以关键就在于客户端的MFP语言如何将资源文件传到服务端,而服务端的MFP语言(它和客户端MFP语言运行的是同样的代码)如何保存并调用这些资源文件,同时不影响在服务端运行的其它客户端的call程序块或者服务端自己正在运行的程序。 以下代码给出了一个例子,在这段代码需要使用一个叫做food.png的图像文件。在可编程科学计算器上(不论是基于安卓的还是基于JAVA的),该图像文件和这段代码所在的MFP脚本文件位于同一个目录。 @build_asset copy_to_resource(get_upper_level_path(get_src_file_path()) + "food.png", "images/food.png") if is_sandbox_session() foodImage = load_image(get_sandbox_session_resource_path() + "images/food.png") elseif is_mfp_app() foodImage = load_image_from_zip(get_asset_file_path("resource"), "images/food.png", 1) else foodImage = load_image(get_upper_level_path(get_src_file_path()) + "food.png") endif 如果我们将这段代码编译到一个APK安装包中,我们需要把food.png图片拷贝到APK的asset的resource.zip文件中。安装了APK之后,在运行MFP应用时,我们需要调用load_image_from_zip从APK的asset的resource.zip文件中读出图片。为了实现上述过程,我们加入了一个annotation语句: @build_asset copy_to_resource(get_upper_level_path(get_src_file_path()) + "food.png", "images/food.png") ,告诉MFP编译器将位于代码所在目录的food.png文件拷贝到APK的asset的resource.zip文件中,在resource.zip文件中的具体位置是images/food.png。 如果我们不是编译安装包,而是需要把这段代码发送到另外一个设备上去执行,@build_asset同样会发挥作用。如果客户端是可编程科学计算器,@build_asset会告诉call语句把位于代码所在目录的food.png文件传送到服务端MFP沙盒的resource目录中,具体位置是resource目录中的image子目录的food.png文件。如果客户端是一个通过编译出的APK安装的MFP应用,由于MFP应用已经将food.png保存在asset的resource.zip文件中的images目录下,call语句会从安卓的asset中提取出food.png然后传送到服务端MFP沙盒的resource目录中,具体位置仍然是resource目录中的image子目录的food.png文件。 在运行上述代码时,我们需要根据MFP所在的环境执行不同的指令。如果MFP是在沙盒中运行,也就是服务端执行客户端的call程序块,那么资源文件是保存在本地存储器上的,读取图像文件时我们用load_image并指定路径即可。我们通过函数is_sandbox_session()返回true来断定MFP是在沙盒中运行,通过调用函数get_sandbox_session_resource_path()获取沙盒用户资源库所在目录。 如果MFP是在编译安装后的MFP应用中运行,资源文件保存在安卓的asset中的resource.zip包内,所以我们需要调用load_image_from_zip函数。我们通过函数is_mfp_app()返回true来断定MFP是在编译安装后的MFP应用中运行,通过调用函数get_asset_file_path("resource")获取resource包在安卓asset中的具体位置。 如果MFP是在可编程科学计算器中运行,不论是基于JAVA还是安卓,资源文件都保存在本地存储器上,读取图像文件时我们用load_image并指定路径即可。food.png所在的具体目录可以通过调用get_upper_level_path(get_src_file_path())来定位。 如果读取的不是图像文件而是声音文件,上述代码的逻辑基本不变,区别就是调用play_sound或者play_sound_from_zip而不是load_image或者load_image_from_zip。 还需要注意的是,由于函数is_sandbox_session()和is_mfp_app()可能均返回true(比如服务端是一个MFP应用),开发者必须首先判断当前MFP是否在沙盒中运行,也就是说is_sandbox_session()条件语句必须放在最前面,其次才是is_mfp_app()条件语句。 将上述代码加入一个call程序块中,或者将上述代码编入一个运行游戏的函数然后在call程序块中调用,MFP就可以自动地替开发者传递代码和资源文件并在另一个设备中执行该游戏了。 1.8.0.79版的可编程科学计算器已经提供了这样一个例子。在服务器端,使用者选择“探索示例”,然后选择“并行计算例子”,然后选择“运行”,输入2,点击确定按钮,进入服务器模式,这时该程序会列出本设备所有的IP地址,使用者选择一个作为服务地址,然后回车(ENTER键,注意不是运行键)。在客户端设备上,同样地,使用者选择“探索示例”,然后选择“并行计算例子”,然后选择“运行”,输入3,点击确定按钮,进入客户端模式,这时该程序会列出本设备所有的IP地址,使用者选择一个作为客户端地址,然后回车(ENTER键,注意不是运行键),然后再输入刚才选择的服务器地址,然后再次ENTER键回车,客户端会将call程序块发送到服务端,然后在服务端运行超级超级小白兔游戏。不管服务器端的用户代码库中是不是已经有了该游戏均不影响该游戏正常运行,因为该游戏的代码和资源都是通过客户端发送过来的。 需要注意的是,服务器和客户端的IP地址最好位于同一个子网内,也就是中间没有NAT(Network Address Translation)层,如果做不到这一点,最少也必须做到通过客户端IP地址能够ping通服务端的IP地址,在现有的IPv4体系下,由于用户的设备(不管是客户端还是服务端)的IP地址往往被一重或多重NAT层所遮蔽,所以想要执行远程并行计算的难度比较大,但是如果多个设备在同一个内部网中,互联并行则毫无问题;未来IPv6体系下,NAT层不再会像现在这么大行其道,执行远程并行计算将不再是梦想。此外,开发者还在尝试引入NetOTC协议,真正实现远程点对点连接。总之,在编程语言级别上实现并行计算是一个全新思想,MFP语言作为全球第一种引入此思想的编程语言必然有着光明的前景。
可编程科学计算器1.8.0.79发布了,请到酷安网下载 在这个最新版本中,可编程科学计算器进一步完善了并行计算的功能,修正了一系列的bug。现在用户可以在任意一台支持MFP语言的设备上(该设备运行基于JAVA的可编程科学计算器,基于安卓的可编程科学计算器,或者可编程科学计算器编译生成的安卓应用),发送一段代码给另外一台支持MFP语言的设备执行。第二台设备同样行基于JAVA的可编程科学计算器,基于安卓的可编程科学计算器,或者可编程科学计算器编译生成的安卓应用,注意第一台和第二台设备完全可以运行基于不同的平台的可编程科学计算器,或者一台运行可编程科学计算器,另一台运行可编程科学计算器编译生成的安卓应用,或者两台均运行可编程科学计算器编译生成的安卓应用。但需要注意的是两台设备的可编程科学计算器版本均必须为1.8.0.79或以上,如果运行的是可编程科学计算器编译生成的安卓应用,该安卓应用必须由可编程科学计算器1.8.0.79或以上版本编译生成。另外,在当前,下层通信协议仅仅支持TCPIP。 MFP语言实现并行计算是通过call ... endcall语句。call和endcall语句定义了MFP语言call程序块的边界。call程序块是一段不在本进程中而是在别的进程中执行的指令。call语句是call程序块的开始。在call语句中,call关键字后面紧跟着连接对象,然后是on关键字,最后是一串call程序块的参数变量。call程序块的参数变量都是在call语句之前就已经声明的普通的变量。每一个参数变量都只能被一个call语句所使用。endcall语句标志着call程序块的中止。endcall语句有一个可选参数。该参数是call程序块在本地进程的返回变量。返回变量也是在call程序块之前声明的普通变量。返回变量只能被一个call程序块所使用而且不能同时作为call程序块的参数变量。 我们可以把一个call语句看作是一个函数的开始。与普通函数不同的是,call程序块并非是在本地进程中运行,而是在另外一个进程中运行。运行call程序块的进程可以是本机,也可以是另外一台设备。运行call程序块的进程通过call语句中的连接对象和本地进程连接。运行call程序块的进程可以看到call程序块参数变量的值的变化,也可以修改call程序块参数变量的值。call程序块对自己的参数变量的值的修改会反应到本地进程。但是需要注意的是,MFP语言并不保证本地进程和call程序块进程对程序块参数变量的值的修改会被实时同步到对方,也不保证按修改的顺序进行同步传递。MFP语言唯一保证的是在一个进程内对一个call程序块参数变量的修改是原子性的,也就是只有上一次修改完成了之后,对值的新的修改,不管是来自客户端还是服务器端,才能开始。需要注意的是这个原子性只是应用于一个进程。由于call程序块进程和本地进程都有一份程序块参数变量的拷贝,对于一个程序块参数变量的两份拷贝在不同的进程中同时进行修改不违背修改的原子性。当call程序块遇到endcall语句或者return语句时停止运行并返回。如果return语句返回一个值,位于本地进程的endcall语句将收到返回值并将返回值赋给call程序块在本地进程的返回变量(如果endcall语句声明了返回变量的话)。 需要注意的是,不同于call程序块的参数变量,call程序块的返回变量采用的是阻塞模式。换句话说,当call程序块被发送到远端执行后,任何在本地进程读取call程序块的返回变量的值的语句都将被阻塞,直到call程序块返回(不管有没有返回值)为止。 以下是call程序块的一个例子: variable local_interface, remote_interface, ret local_interface = ::mfp::paracomp::connect::generate_interface("TCPIP", "192.168.1.101")//客户端(本地进程)地址 ret = ::mfp::paracomp::connect::initialize_local(local_interface, false) print("initialize_local ret = " + ret + "\n") remote_interface = ::mfp::paracomp::connect::generate_interface("TCPIP", "192.168.1.107")//服务器端(运行call程序块的进程)地址 ret = ::mfp::paracomp::connect::connect(local_interface, remote_interface)//从客户端连接到服务器端 print("connect ret = " + ret + "\n") //connect函数的返回值是一个基于数组的字典,"CONNECT"关键字所对应的就是连接对象的定义。如果connect函数失败,"CONNECT"关键字对应的值为NULL。 variable conn = ::mfp::data_struct::array_based::get_value_from_abdict(ret, "CONNECT") variable a = "hekko, 48", b = 3+7i, c=["LCH"] call conn on a, b a = 88 b = "KIL" print("Hello ....\n") return 54 endcall c //我们必须先取回c的值。c的值能够取回方才意味着call程序块已经返回。 print("c = " + c) //当c的值取回之后,我们可以打印出a和b的值。可以看到这时a和b的值已经发生了更改。如果我们在print("c = " + c)语句之前打印a和b的值, //我们可能无法观察到a和b的值发生了变化 print("a = " + a + " b = " + b) close_out_connection(local_interface, remote_interface)//关闭连接 close_local(local_interface, false)//关闭本地通信协议界面 以上代码是由客户端进程所执行,在服务器端,我们需要运行以下代码接收连接请求并运行call程序块: variable local_interface, ret local_interface = ::mfp::paracomp::connect::generate_interface("TCPIP", "192.168.1.107")//服务器端(运行call程序块的进程)地址 ret = ::mfp::paracomp::connect::initialize_local(local_interface, true) print("initialize_local ret = " + ret + "\n") //监听连接请求。监听线程将在后台工作。 ret = ::mfp::paracomp::connect::listen(local_interface) print("listen ret = " + ret + "\n") //下面这条input语句将阻塞程序的运行。如果服务端代码是一个简单的MFPS脚本并且是在bash或者Windows命令提示符中运行,input语句可以阻止服务器程序的退出所以是必 //不可少的。但是如果是在安卓或者MFP语言的JAVA界面程序中运行,只要安卓应用或JAVA界面程序不退出input语句就是不必要的。因为这种情况下服务器端的进程并没有中止。 input("Press any key to exit\n", "S") 先运行以上服务器端代码,然后在不同的设备中运行客户端代码。在运行之前需要确保客户端和服务器端的地址是正确的。开发者可以看到在服务器端一个Hello ....消息被打印出来。在客户端变量c的新值是一个基于数组的字典,call程序块的返回值54位于该字典中。变量a和b的值也都被更新了。
可编程科学计算器1.8.0.79发布了,请到酷安网下载 在这个最新版本中,可编程科学计算器进一步完善了并行计算的功能,修正了一系列的bug。现在用户可以在任意一台支持MFP语言的设备上(该设备运行基于JAVA的可编程科学计算器,基于安卓的可编程科学计算器,或者可编程科学计算器编译生成的安卓应用),发送一段代码给另外一台支持MFP语言的设备执行。第二台设备同样行基于JAVA的可编程科学计算器,基于安卓的可编程科学计算器,或者可编程科学计算器编译生成的安卓应用,注意第一台和第二台设备完全可以运行基于不同的平台的可编程科学计算器,或者一台运行可编程科学计算器,另一台运行可编程科学计算器编译生成的安卓应用,或者两台均运行可编程科学计算器编译生成的安卓应用。但需要注意的是两台设备的可编程科学计算器版本均必须为1.8.0.79或以上,如果运行的是可编程科学计算器编译生成的安卓应用,该安卓应用必须由可编程科学计算器1.8.0.79或以上版本编译生成。另外,在当前,下层通信协议仅仅支持TCPIP。 MFP语言实现并行计算是通过call ... endcall语句。call和endcall语句定义了MFP语言call程序块的边界。call程序块是一段不在本进程中而是在别的进程中执行的指令。call语句是call程序块的开始。在call语句中,call关键字后面紧跟着连接对象,然后是on关键字,最后是一串call程序块的参数变量。call程序块的参数变量都是在call语句之前就已经声明的普通的变量。每一个参数变量都只能被一个call语句所使用。endcall语句标志着call程序块的中止。endcall语句有一个可选参数。该参数是call程序块在本地进程的返回变量。返回变量也是在call程序块之前声明的普通变量。返回变量只能被一个call程序块所使用而且不能同时作为call程序块的参数变量。 我们可以把一个call语句看作是一个函数的开始。与普通函数不同的是,call程序块并非是在本地进程中运行,而是在另外一个进程中运行。运行call程序块的进程可以是本机,也可以是另外一台设备。运行call程序块的进程通过call语句中的连接对象和本地进程连接。运行call程序块的进程可以看到call程序块参数变量的值的变化,也可以修改call程序块参数变量的值。call程序块对自己的参数变量的值的修改会反应到本地进程。但是需要注意的是,MFP语言并不保证本地进程和call程序块进程对程序块参数变量的值的修改会被实时同步到对方,也不保证按修改的顺序进行同步传递。MFP语言唯一保证的是在一个进程内对一个call程序块参数变量的修改是原子性的,也就是只有上一次修改完成了之后,对值的新的修改,不管是来自客户端还是服务器端,才能开始。需要注意的是这个原子性只是应用于一个进程。由于call程序块进程和本地进程都有一份程序块参数变量的拷贝,对于一个程序块参数变量的两份拷贝在不同的进程中同时进行修改不违背修改的原子性。当call程序块遇到endcall语句或者return语句时停止运行并返回。如果return语句返回一个值,位于本地进程的endcall语句将收到返回值并将返回值赋给call程序块在本地进程的返回变量(如果endcall语句声明了返回变量的话)。 需要注意的是,不同于call程序块的参数变量,call程序块的返回变量采用的是阻塞模式。换句话说,当call程序块被发送到远端执行后,任何在本地进程读取call程序块的返回变量的值的语句都将被阻塞,直到call程序块返回(不管有没有返回值)为止。 以下是call程序块的一个例子: variable local_interface, remote_interface, ret local_interface = ::mfp::paracomp::connect::generate_interface("TCPIP", "192.168.1.101")//客户端(本地进程)地址 ret = ::mfp::paracomp::connect::initialize_local(local_interface, false) print("initialize_local ret = " + ret + "\n") remote_interface = ::mfp::paracomp::connect::generate_interface("TCPIP", "192.168.1.107")//服务器端(运行call程序块的进程)地址 ret = ::mfp::paracomp::connect::connect(local_interface, remote_interface)//从客户端连接到服务器端 print("connect ret = " + ret + "\n") //connect函数的返回值是一个基于数组的字典,"CONNECT"关键字所对应的就是连接对象的定义。如果connect函数失败,"CONNECT"关键字对应的值为NULL。 variable conn = ::mfp::data_struct::array_based::get_value_from_abdict(ret, "CONNECT") variable a = "hekko, 48", b = 3+7i, c=["LCH"] call conn on a, b a = 88 b = "KIL" print("Hello ....\n") return 54 endcall c //我们必须先取回c的值。c的值能够取回方才意味着call程序块已经返回。 print("c = " + c) //当c的值取回之后,我们可以打印出a和b的值。可以看到这时a和b的值已经发生了更改。如果我们在print("c = " + c)语句之前打印a和b的值, //我们可能无法观察到a和b的值发生了变化 print("a = " + a + " b = " + b) close_out_connection(local_interface, remote_interface)//关闭连接 close_local(local_interface, false)//关闭本地通信协议界面 以上代码是由客户端进程所执行,在服务器端,我们需要运行以下代码接收连接请求并运行call程序块: variable local_interface, ret local_interface = ::mfp::paracomp::connect::generate_interface("TCPIP", "192.168.1.107")//服务器端(运行call程序块的进程)地址 ret = ::mfp::paracomp::connect::initialize_local(local_interface, true) print("initialize_local ret = " + ret + "\n") //监听连接请求。监听线程将在后台工作。 ret = ::mfp::paracomp::connect::listen(local_interface) print("listen ret = " + ret + "\n") //下面这条input语句将阻塞程序的运行。如果服务端代码是一个简单的MFPS脚本并且是在bash或者Windows命令提示符中运行,input语句可以阻止服务器程序的退出所以是必 //不可少的。但是如果是在安卓或者MFP语言的JAVA界面程序中运行,只要安卓应用或JAVA界面程序不退出input语句就是不必要的。因为这种情况下服务器端的进程并没有中止。 input("Press any key to exit\n", "S") 先运行以上服务器端代码,然后在不同的设备中运行客户端代码。在运行之前需要确保客户端和服务器端的地址是正确的。开发者可以看到在服务器端一个Hello ....消息被打印出来。在客户端变量c的新值是一个基于数组的字典,call程序块的返回值54位于该字典中。变量a和b的值也都被更新了。
可编程科学计算器1.8.0.78发布了 请大家到酷安网下载 新功能如下: 增加对并行计算的支持。事实上,MFP语言就是Mathematical language For Parallel computing的缩写。并行计算的支持是通过新增加的call语句和一系列与之相关的函数,比如generate_interface,initialize_local,listen和connect实现的。具体说来,在客户端MFP语言发送一个call程序块给在监听的服务器,服务器执行该程序块并返回结果给客户端。客户端和服务器之间通过call程序块的参数进行交流。但需要注意的是并行计算的功能还在发展和测试中,现阶段仅仅支持TCPIP协议。 大家一定还记得前一段时间我一直在测试远程端到端通信,很多人不理解,觉得可编程科学计算器就是一个计算器,为什么要引入通信功能?现在大家理解了吧。引入通信功能是为了增加对并行计算的支持。 大家知道,计算机语言的发展出现过两次飞越,第一次从汇编到C,程序员不再需要关心寄存器中断等底层硬件相关的东西,第二次从C++到JAVA,程序员不再需要关系内存管理,本人觉得还需要第三次飞越,就是对网络通信的内在支持。这个很重要,因为以后,特别是随着IPV6的普及,每个设备都有自己的IP,设备之间如何简单方便地直接交互是个问题,你当然可以用现有的TCPIP栈,不过这玩艺儿不是一般的麻烦,一般人用不来,更何况TCPIP协议传数据可以,传指令就不方便了,你又要用RPC,总之,难上加难。随着人工智能的进化,大规模并行计算更是迫在眉睫。MFP语言就是一种新的编程思想,在编程语言的层面上解决这个问题。
可编程科学计算器新版发布并找人进行跨国通信测试 可编程科学计算器1.7.4.69版发布了,请到酷安网下载。 这个版本的新功能是,你只要启动可编程科学计算器的后台信号服务,可编程科学计算器自己不必启动,别人给你发连接请求,只要你设置允许自动打开视频通话,那么视频通话就会被自动打开。 这个新功能无需双方主动,只需一方主动连接,另一方接受到连接信号后被动进行反应。它是向人工智能并行计算的重要一步,同时也有重要的商业价值。试想,你只需要两部能够上网的安卓手机和两个email地址,哪怕第二部手机在万里之外,哪怕第二部手机无人操控,你都可以随时用你手中的第一部手机看到第二部手机所在位子的情况,而且,你的通信是不需要经过中央服务器的,也就是数据流是绝对安全的,这是一个多么强大和有前途的远程监控系统啊。 当然,前提条件是,你的手机不会自动关闭后台的信号服务。有些手机,比如OPPO,小米,华为,还有一些三星手机,为了省电,在缺省设置时会终止非特许应用在后台运行。在这种情况下,你需要手动设置允许后台服务运行。比如OPPO手机,你需要到设置里面,选择电池,在应用列表中找到可编程科学计算器,然后关闭"冻结后台运行"和"允许系统管理异常"两个选项。 以上功能在澳洲测试是毫无问题的,但是,我还没有进行跨洲测试,不知有没有用户能帮我这个忙进行跨洲测试,如果愿意,就发信给我。
请大家帮我一起测试端到端通信 首先向大家说一声抱歉,这半年没有发新版本,原因是端到端(peer to peer)通信实现起来太难,而且测试也是大问题(所以需要大家帮忙)。 很多人可能会问,现在已经有微信,qq了,为什么你还要搞一个端到端的通信?而且这和计算器似乎风马牛不相及。 我的回答是,首先,端到端通信和微信qq截然不同。微信和qq这样的通信应用是需要有中央服务器的。你登陆了微信的服务器,才能寻找你的好友(你需要知道你的好友的微信号,这有时候也不是一件很容易的事情),然后加好友,才能开始通信。你所有的发给好友的短消息,都要通过微信服务器转发。 但是可编程科学计算器的通信方式截然不同,这里不需要中央服务器,你只需要知道对方的Email(现阶段对方也需要知道你的email,以后甚至对方可以不需要知道你的email),就可以和对方进行短消息和视频聊天,你所有发给对方的短消息,都是直接被对方收到,无需找一个服务器进行转发。 当然,可能有人又说,是的,你的这个技术看起来很先进,但是短信语音视频聊天这样的功能微信qq都已经做得很完善了,我干嘛要用你的这个还很不稳定,还在测试的东西? 我的回答是,我做端到端通信,并不是为了和微信qq竞争。我是做计算器的,和微信qq确实是风马牛不相及。但是,我必须做端到端通信,原因是这是实现移动并行计算唯一的路。 众所周知,现有的并行计算的实现方式是有两种,一种是通过一台电脑多CPU的方式(这也包括GPU的模式,也就是一个GPU多内核),比如天河据说有2000多块CPU,还有一种是多台电脑通过高速局域网连接的方式。这些方式各有优势,但是都需要特别的硬件。全世界有几十亿部手机电脑,但由于没有这些特别的硬件,并行计算无法利用这些计算资源。对于并行计算来讲,由于每一个并行集群所包含的计算单元有限(即便可以到1万个核,也还是有限的),所以并行计算的真正潜力没有得到发挥。 端到端的通信,所起的作用就相当于用软件来模拟以太网,当然,用软件来模拟硬件,肯定就不会是高速了。但是考虑到全世界有几十亿部手机电脑,这就意味着一个并行集群所包含的计算单元几乎是无限的。我们知道,人的大脑包含860亿个神经元,但是一个单独的神经元其实非常简单,计算能力远远比不上一只手机。现在虽然没有860亿个神经元,但如果能够成功构建一个包含有860万个强大的计算单元的集群,在上面进行并行计算,能够实现怎么样的功能?,能够实现和人类大脑相似甚至更强的功能吗?这将是一个很有趣的问题。 当然,这是一个宏大而遥远的目标,我也不见得能够实现。但无论如何,试一下是没错的。我远在澳洲,端到端通信有很多东西一个人测试不了,所以,我就需要大家帮我的忙了。我测试用的email是[email protected],由于现阶段需要测试双方同时连接对方,所以如果大家想和我进行测试,请先发email到[email protected],和我约好时间(注意不要发到测试email里面,因为那里面的email会太多,我可能看不到),告诉我你的email地址,我们一起测试。深表感谢。
qwqw25565请进 如果想在电脑上开发MFP游戏,您先要用一根usb导线把手机和装有JAVA的电脑连起来,在电脑上找到手机内存所对应的存储盘,在上面找到AnMath目录,整个拷贝到电脑的硬盘上,然后进入拷贝后的AnMath目录,运行JMathCmd.jar文件,就打开了基于JAVA的可编程科学计算器.基于JAVA的可编程科学计算器就像一个小matlab,用法和手机上的可编程科学计算器的命令提示符工具完全一样。在上面可以运行手机上的各种程序和游戏。比如你想运行超级小白兔游戏,在基于JAVA的可编程科学计算器中输入 ::gdi_test::game_test::super_bunny::run() ,然后回车即可。如果想运行贪吃蛇,输入 ::gdi_test::game_test::hungry_snake::run() ,然后回车即可。如果想运行削宝石游戏,输入 ::gdi_test::game_test::gemgem::start_gemgem() ,然后回车即可。 这些游戏的源代码在AnMath/scripts/manual/2D games/目录下。该目录有三个子目录,分别是gemgem(对应削宝石游戏),hungry_snake(对应贪吃蛇游戏)和super_bunny(对应超级小白兔游戏).进入每个游戏目录,找到.mfps文件,这就是源代码,推荐用notepad++打开编辑。如果楼主想开发自己的游戏,需要确保将游戏代码和资源文件所在目录保存在AnMath/scripts目录下,开发完毕后,将整个AnMath目录拷贝回安卓内存,覆盖原来是的AnMath目录,那么在您的手机中,就可以运行在电脑上开发的游戏了。当然,对于初学者,最好从修改现有的例子游戏开始.游戏开发完后,开发者既可以在电脑上打包APK,也可以在手机上打包APK,生成的APK包可以在各大网站发布,不会有任何报病毒或者什么其它问题。游戏开发不是一个简单的工作,建议楼主先好好阅读pdf手册的游戏开发章节,循序渐进,从最简单的开始逐步推进
重发:在电脑上用MFP开发游戏 如果想在电脑上开发MFP游戏,您先要用一根usb导线把手机和装有JAVA的电脑连起来,在电脑上找到手机内存所对应的存储盘,在上面找到AnMath目录,整个拷贝到电脑的硬盘上,然后进入拷贝后的AnMath目录,运行JMathCmd.jar文件,就打开了基于JAVA的可编程科学计算器.基于JAVA的可编程科学计算器就像一个小matlab,用法和手机上的可编程科学计算器的命令提示符工具完全一样。在上面可以运行手机上的各种程序和游戏。比如你想运行超级小白兔游戏,在基于JAVA的可编程科学计算器中输入 ::gdi_test::game_test::super_bunny::run() ,然后回车即可。如果想运行贪吃蛇,输入 ::gdi_test::game_test::hungry_snake::run() ,然后回车即可。如果想运行削宝石游戏,输入 ::gdi_test::game_test::gemgem::start_gemgem() ,然后回车即可。 这些游戏的源代码在AnMath/scripts/manual/2D games/目录下。该目录有三个子目录,分别是gemgem(对应削宝石游戏),hungry_snake(对应贪吃蛇游戏)和super_bunny(对应超级小白兔游戏).进入每个游戏目录,找到.mfps文件,这就是源代码,推荐用notepad++打开编辑。如果楼主想开发自己的游戏,需要确保将游戏代码和资源文件所在目录保存在AnMath/scripts目录下,开发完毕后,将整个AnMath目录拷贝回安卓内存,覆盖原来是的AnMath目录,那么在您的手机中,就可以运行在电脑上开发的游戏了。当然,对于初学者,最好从修改现有的例子游戏开始.游戏开发完后,开发者既可以在电脑上打包APK,也可以在手机上打包APK,生成的APK包可以在各大网站发布,不会有任何报病毒或者什么其它问题。游戏开发不是一个简单的工作,建议楼主先好好阅读pdf手册的游戏开发章节,循序渐进,从最简单的开始逐步推进
开放了我的数学公式识别库和相关安卓应用的源码 最近两年比较忙,无法对自己的智慧计算器安卓应用快速升级更新,所以决定把代码贡献出来,希望能够给需要的人以帮助。而我自己则可以集中经历于可编程科学计算器的开发。 我开发的软件是一个数学公式图像识别的库,以及基于这个库的安卓应用,也就是智慧计算器。用户只需要点击安卓应用的一个按钮,进入拍照模式,然后对数学公式拍照,就可以识别公式并根据识别的结果进行计算或者作图。 本人不是人工智能或计算机视觉科班出身,编这个软件存粹靠自己的摸索。再加上又是业余时间在做,所以,识别的准确率和效率都有待提高。主要的问题是第一,没有足够多的数学公式素材进行训练;第二,还没有实现自动学习,还是得依靠开发者进行代码修改。但是,我觉得我的思路是对的,这个软件的性能和准确率的提升空间是很大的。我知道现在有很多商业数学公司识别的软件,比如PhotoMath之类,准确率和效率都很高。但是它是用C写的,源码不是开放的。我一个人单枪匹马,肯定比不上PhotoMath背后的大公司,但我想,如果有大牛愿意在我的这个JAVA库上继续发展,从硬件兼容性和开放性的角度看,这个库还是很有前景的。 我的这些代码的下载地址是 github点com/woshiwpa 它包含3个项目:CoreMathImgProc是纯JAVA数学公式识别库,JMathImgProc是基于桌面的JAVA测试程序,用于调用并测试CoreMathImgProc,SmartMath是调用CoreMathImgProc库的安卓应用。具体如何编译,参见每个项目的readme.MD文件。希望大家能够多多关注这个库,把这个帖子顶起来。
可编程科学计算器1.6.7.54发布了,另外请问大家几个问题 请大家到 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.coolapk.com%2Fapk%2Fcom.cyzapps.AnMath&urlrefer=0982a7215a3479fd300f72e946c45d2b 下载。 这个版本增加了应用内购买的功能,也就是,如果大家的手机装有谷歌商店(注意必须装有谷歌商店),那么可以购买编译无广告的MFP应用,一次购买6个编译无广告的MFP应用许可,总共差不多人民币9元。由于我不在国内,所以有些情况没法测试,在这里请问大家几个问题,希望大家能够帮忙解答: 问题1: 国内的很多手机都删除了谷歌服务,当然也就没有谷歌商店,也就没法购买编译无广告的MFP应用许可。在这种情况下,大家编译出来的MFP应用还是有广告的,我想请问,大家在这种情况下编译MFP应用有没有任何问题?换句话说,我的软件是不是能够做到在没有谷歌服务的时候依然正常编译MFP应用? 问题2: 如果您的手机有谷歌服务和谷歌商店,能不能顺利购买应用。当然,我并不是说让大家购买应用,大家编译MFP应用到最后一步,点击购买更多按钮后,能不能看到购买6个MFP无广告编译许可的提示并让您输入密码?如果能看到,就说明没问题,大家按回退键取消就可以了,如果不能看到,就说明在国内这个功能用不了。 问题3: 大家觉得人民币9元购买6个编译无广告的MFP应用许可贵不贵? 谢谢大家帮我回答。 新的功能如下: * 为用户提供了完整的PDF版的使用手册(简体中文版)、MFP语言程式开发指南(简体中文版)以及示例代码。进入程式开发科学计算器后用户点击帮助图标即可以打开或共享PDF版帮助文档或者阅读示例代码; * 允许用户直接调用底层绘图函数程式plot_2d_curves,plot_polar_curves和plot_3d_surfaces。这三个函数程式可以最多在一张图上绘制出1024条曲线(面); * 对三维绘图进行了微调,现在图像绘制完成后x、y和z的比例就自动设置为1:1:1,而坐标轴将会自动隐藏(用户可以设置它们重新显示)。此外,还在“绘制三维图像”工具中增加了绘制上海东方明珠电视塔的例子。用户点击菜单按钮,选择“填充示例”,即可以运行这个例子。 * 如果用户安装了谷歌商店,则可以在应用内购买(一次6个)创建无广告MFP应用的许可。这样用户自己创建的MFP应用就不再显示任何广告; * 增强了System函数程式的功能,用户现在可以通过System函数程式在安卓上运行一些Shell的基本命令了(但要注意System的调用方法也有一些变化); *很多错误得到了修正;
可编程科学计算器用户手册草稿预览完整版(pdf) 请大家在 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1mgirizA&urlrefer=1e3e0ee3ae9fb4c260e40493473b638a 或者 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1kTF3mNP&urlrefer=4b41750b40d5eed6f561b885e1b5c468 下载。 内容如下: 前言及开发者的话 .................................................................... 1 第1章 可编程科学计算器初级用户使用指南 ...................... 8 第1节 安装与启动 ........................................................................ 8 第2节 智慧计算器的使用 ............................................................. 9 第3节 命令提示符的使用 ........................................................... 20 第4节 绘制图形工具 .................................................................. 22 第5节 计算积分工具 .................................................................. 37 第6节 设置输入键盘 .................................................................. 37 第7节 管理文件和编写程序 ........................................................ 38 第8节 设置工具 ......................................................................... 38 第9节 在电脑上运行可编程科学计算器工具 .............................. 39 第10节 创建MFP应用工具 ......................................................... 44 第11节 帮助工具 ........................................................................ 45 小结 ............................................................................................... 45 第2章 MFP编程语言基础 ................................................. 47 第1节 MFP编程语言概述 ........................................................... 47 第2节 MFP编程语言基本数据类型 ............................................. 49 第3节 MFP编程语言所支持的操作符 ......................................... 51 第4节 function,return和endf语句...................................... 53 第5节 variable语句 ................................................................ 55 第6节 if,elseif,else和endif语句 .................................... 56 第7节 while,loop;do,until和for,next语句 .................. 58 第8节 break和continue语句 .................................................. 61 第9节 select,case,default和ends语句 ............................. 61 第10节 try,throw,catch和endtry语句 .............................. 63 第11节 solve和slvreto语句 .................................................. 67 第12节 help和endh语句以及@language标注 .......................... 73 第13节 @compulsory_link标注 ................................................. 75 第14节 如何部署用户创建的MFP函数程序 ................................ 76 小结 ............................................................................................... 78 第3章 MFP编程语言对数、字符串和数组的操作 .............. 79 第1节 MFP对数的操作函数 ........................................................ 79 1. MFP对整数的操作 ........................................................................... 79 2. MFP进制转换函数 ........................................................................... 81 3. MFP逻辑操作函数 ........................................................................... 86 4. MFP对复数的操作函数 .................................................................... 88 第2节 MFP对字符串的操作函数 ................................................ 89 第3节 MFP对数组和矩阵的操作函数 ......................................... 94 1. MFP创建数组的函数 ....................................................................... 95 2. 获取数组的尺寸和判断数组的特征 ................................................... 96 3. 对数组赋值 ....................................................................................... 98 小结 ............................................................................................. 102 第4章 MFP编程语言对于各种数学和科学计算的支持 ..... 103 第1节 内置的数学常用变量 ...................................................... 103 第2节 单位转换函数和返回物理化学常量值的函数 .................. 103 第3节 三角函数双曲三角函数 .................................................. 106 第4节 指数,对数和次方函数 .................................................. 110 第5节 矩阵相关函数 ................................................................ 113 第6节 表达式和积分函数 ......................................................... 119 第7节 统计、随机和排序函数 .................................................. 124 第8节 信号处理函数 ................................................................ 128 第9节 阶乘求值函数、判断质数函数和多项式求根函数 ........... 130 小结 ............................................................................................. 133 第5章 用MFP编程语言绘制图形 .................................... 134 第1节 绘制表达式的图像 ......................................................... 134 第2节 绘制常规坐标系下的二维图像 ....................................... 141 第3节 绘制极坐标系下的二维图像 ........................................... 151 第4节 绘制三维图像 ................................................................ 156 小结 ............................................................................................. 177 第6章 输入输出和文件操作 ........................................... 178 第1节 在命令提示符中输入输出 .............................................. 178 第2节 对字符串输入输出 ......................................................... 190 第3节 文件内容读写及其相关函数 ........................................... 194 1. 打开和关闭文件 .............................................................................. 196 2. 文本文件的读写 .............................................................................. 198 3. 二进制文件的读写 .......................................................................... 204 第4节 文件属性操作函数 ......................................................... 208 第5节 类似Dos和Unix命令的文件整体操作函数 ................... 218 第6节 进行复杂文件操作示例 .................................................. 226 小结 ............................................................................................. 239 第7章 日期和时间以及系统函数 .................................... 240 第1节 日期和时间的函数 ......................................................... 240 第2节 系统相关函数 ................................................................ 247 小结 ............................................................................................. 249 第8章 构建用户自己的应用 ........................................... 250 后记 ...................................................................................... 255
可编程科学计算器用户手册草稿预览完整版(pdf) 请大家在 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1mgirizA&urlrefer=1e3e0ee3ae9fb4c260e40493473b638a 或者 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1kTF3mNP&urlrefer=4b41750b40d5eed6f561b885e1b5c468 下载。 内容如下: 前言及开发者的话 .................................................................... 1 第1章 可编程科学计算器初级用户使用指南 ...................... 8 第1节 安装与启动 ........................................................................ 8 第2节 智慧计算器的使用 ............................................................. 9 第3节 命令提示符的使用 ........................................................... 20 第4节 绘制图形工具 .................................................................. 22 第5节 计算积分工具 .................................................................. 37 第6节 设置输入键盘 .................................................................. 37 第7节 管理文件和编写程序 ........................................................ 38 第8节 设置工具 ......................................................................... 38 第9节 在电脑上运行可编程科学计算器工具 .............................. 39 第10节 创建MFP应用工具 ......................................................... 44 第11节 帮助工具 ........................................................................ 45 小结 ............................................................................................... 45 第2章 MFP编程语言基础 ................................................. 47 第1节 MFP编程语言概述 ........................................................... 47 第2节 MFP编程语言基本数据类型 ............................................. 49 第3节 MFP编程语言所支持的操作符 ......................................... 51 第4节 function,return和endf语句...................................... 53 第5节 variable语句 ................................................................ 55 第6节 if,elseif,else和endif语句 .................................... 56 第7节 while,loop;do,until和for,next语句 .................. 58 第8节 break和continue语句 .................................................. 61 第9节 select,case,default和ends语句 ............................. 61 第10节 try,throw,catch和endtry语句 .............................. 63 第11节 solve和slvreto语句 .................................................. 67 第12节 help和endh语句以及@language标注 .......................... 73 第13节 @compulsory_link标注 ................................................. 75 第14节 如何部署用户创建的MFP函数程序 ................................ 76 小结 ............................................................................................... 78 第3章 MFP编程语言对数、字符串和数组的操作 .............. 79 第1节 MFP对数的操作函数 ........................................................ 79 1. MFP对整数的操作 ........................................................................... 79 2. MFP进制转换函数 ........................................................................... 81 3. MFP逻辑操作函数 ........................................................................... 86 4. MFP对复数的操作函数 .................................................................... 88 第2节 MFP对字符串的操作函数 ................................................ 89 第3节 MFP对数组和矩阵的操作函数 ......................................... 94 1. MFP创建数组的函数 ....................................................................... 95 2. 获取数组的尺寸和判断数组的特征 ................................................... 96 3. 对数组赋值 ....................................................................................... 98 小结 ............................................................................................. 102 第4章 MFP编程语言对于各种数学和科学计算的支持 ..... 103 第1节 内置的数学常用变量 ...................................................... 103 第2节 单位转换函数和返回物理化学常量值的函数 .................. 103 第3节 三角函数双曲三角函数 .................................................. 106 第4节 指数,对数和次方函数 .................................................. 110 第5节 矩阵相关函数 ................................................................ 113 第6节 表达式和积分函数 ......................................................... 119 第7节 统计、随机和排序函数 .................................................. 124 第8节 信号处理函数 ................................................................ 128 第9节 阶乘求值函数、判断质数函数和多项式求根函数 ........... 130 小结 ............................................................................................. 133 第5章 用MFP编程语言绘制图形 .................................... 134 第1节 绘制表达式的图像 ......................................................... 134 第2节 绘制常规坐标系下的二维图像 ....................................... 141 第3节 绘制极坐标系下的二维图像 ........................................... 151 第4节 绘制三维图像 ................................................................ 156 小结 ............................................................................................. 177 第6章 输入输出和文件操作 ........................................... 178 第1节 在命令提示符中输入输出 .............................................. 178 第2节 对字符串输入输出 ......................................................... 190 第3节 文件内容读写及其相关函数 ........................................... 194 1. 打开和关闭文件 .............................................................................. 196 2. 文本文件的读写 .............................................................................. 198 3. 二进制文件的读写 .......................................................................... 204 第4节 文件属性操作函数 ......................................................... 208 第5节 类似Dos和Unix命令的文件整体操作函数 ................... 218 第6节 进行复杂文件操作示例 .................................................. 226 小结 ............................................................................................. 239 第7章 日期和时间以及系统函数 .................................... 240 第1节 日期和时间的函数 ......................................................... 240 第2节 系统相关函数 ................................................................ 247 小结 ............................................................................................. 249 第8章 构建用户自己的应用 ........................................... 250 后记 ...................................................................................... 255
1 下一页