我很想开始为外部设备和传感器编写托管代码.是否有任何可以使用.NET编码的设备?有什么建议?
编辑:我要做的主要是学习设备编程的工作原理.在我看来,没有比尝试做一些有趣和酷的事情更好的方法.
基本上我想清理用户在表单中提交的一些数据,如果出现错误,我会重新显示它.如果我从表单对象中提取数据,这很容易做到.我可以覆盖clean()方法并操纵数据.我也可以在第一次显示时设置.initial值.但是,我找不到一种方法来处理将在出错时重新显示的表单数据.例如,假设用户提交的电话号码为"123 456 test test 7890",我希望能够删除非字母数字字符(这很容易),并在表单字段中只显示数字"1234567890" .
问题
在我们在项目之间重用的堆栈中,我们在会话中放置了一些过多的数据,用于在页面之间传递数据.这在理论上是好的,因为它可以防止篡改,重放攻击等,但它会产生尽可能多的问题.
会话丢失本身是一个问题,尽管它主要通过实现会话状态服务器(或使用SQL Server)来处理.更重要的是,使后退按钮正常工作非常棘手,而且创建一种情况也是额外的工作,用户可以在三个选项卡中打开相同的屏幕来处理不同的记录.
这只是冰山一角.
大多数这些问题都有解决方法,但是当我磨砺掉时,所有这些摩擦让我觉得使用session在页面之间传递数据是错误的方向.
我真正想要做的是提出一个最佳实践,我的商店可以一直使用它来在页面之间传递数据,然后,对于新的应用程序,替换当前依赖于Session的堆栈的关键部分.
如果最终解决方案不会导致大量的样板管道代码,那也很好.
提出的解决方案
会议
如上所述,严重依赖Session 似乎是一个好主意,但它会打破后退按钮并导致其他一些问题.
可能有办法解决所有问题,但似乎需要做很多额外的工作.
使用会话非常好的一件事是篡改不是问题.与通过未加密的QueryString传递所有内容相比,您最终编写的守护代码更少.
跨页发布
事实上,我几乎没有考虑过这个选择.我有一个问题,它如何使页面紧密耦合 - 如果我开始做PreviousPage.FindControl("SomeTextBox"),这似乎是一个维护问题,如果我想从另一个页面可能没有到达此页面一个名为SomeTextBox的控件.
它似乎也受到其他方面的限制.也许我想通过链接访问该页面.
请求参数
我现在正倾向于这种策略,就像在过去那样.但我可能希望我的QueryString被加密以使其更难以篡改,我也想处理重放攻击的问题.
来自Rolla的4个人,有一篇关于此的文章.
但是,应该可以创建一个HttpModule来处理所有这些并从页面中删除所有加密香肠.果然,Mads Kristensen有一篇文章,他发布了一篇文章.但是,这些评论听起来似乎有极其常见的情况.
其他选择
当然,这不是对选项的详尽看法,而是我正在考虑的主要选项.此链接包含更完整的列表.我没有提到的那些如Cookies和Cache不适合在页面之间传递数据.
在结束...
那么,您如何处理页面之间传递数据的问题?你需要解决什么隐藏的陷阱,是否有任何预先存在的工具可以完美地解决它们?难道你觉得你已经得到了你和完全满意的解决方案?
提前致谢!
更新:以防万一我不够清楚,通过'在页面间传递数据'我正在谈论,例如,将CustomerID密钥从CustomerSearch.aspx页面传递给Customers.aspx,客户将在那里打开并且可以进行编辑.
Mmap返回void*,但不是a volatile void*.如果我使用mmap来映射共享内存,那么另一个进程可能正在写入该内存,这意味着来自同一内存位置的两个后续读取可能会产生不同的值 - 这是指volatile的确切情况.那么为什么它不会返回一个易变的空隙*?
我最好的猜测是,如果你有一个专门写入共享内存段的进程,它不需要通过volatile指针查看共享内存,因为它总能正确理解存在的内容; 编译器为防止冗余读取所做的任何优化都无关紧要,因为没有其他任何内容可以写入并更改其下的值.还是有其他一些历史原因?我倾向于说返回volatile void*将是一个更安全的默认值,那些想要进行优化的人可以手动转换为void*.
POSIX mmap说明:http://opengroup.org/onlinepubs/007908775/xsh/mmap.html
在Beta,Paul R和Sjoerd的帮助下,我一直在重构我的makefile(感谢大家!).
以下是我的STARTING产品:
#Nice, wonderful makefile written by Jason
CC=g++
CFLAGS=-c -Wall
BASE_DIR:=.
SOURCE_DIR:=$(BASE_DIR)/source
BUILD_DIR:=$(BASE_DIR)/build
TEST_DIR:=$(BASE_DIR)/build/tests
MAKEFILE_DIR:=$(BASE_DIR)/makefiles
DATA_DIR:=$(BASE_DIR)/data
DATA_DIR_TESTS:=$(DATA_DIR)/tests
MOLECULE_UT_SOURCES := $(SOURCE_DIR)/molecule_test/main.cc \
$(SOURCE_DIR)/molecule_manager.h \
$(SOURCE_DIR)/molecule_manager.cpp \
$(SOURCE_DIR)/molecule_manager_main.h \
$(SOURCE_DIR)/molecule_manager_main.cpp \
$(SOURCE_DIR)/molecule_reader.h \
$(SOURCE_DIR)/molecule_reader.cpp \
$(SOURCE_DIR)/molecule_reader_psf_pdb.h \
$(SOURCE_DIR)/molecule_reader_psf_pdb.cpp \
$(SOURCE_DIR)/parameter_manager_lj_molecule.h \
$(SOURCE_DIR)/parameter_manager_lj_molecule.cpp \
$(SOURCE_DIR)/parameter_manager.h \
$(SOURCE_DIR)/parameter_manager.cpp \
$(SOURCE_DIR)/parser.h \
$(SOURCE_DIR)/parser.cpp \
$(SOURCE_DIR)/common.h
MOLECULE_UT_DATA := \
$(DATA_DIR_TESTS)/molecule_test/par_oxalate_and_friends.inp \
$(DATA_DIR_TESTS)/molecule_test/dicarboxy-octane_4.pdb \
$(DATA_DIR_TESTS)/molecule_test/dicarboxy-octane_4.psf
PARAM_UT_SOURCES := $(SOURCE_DIR)/parameter_test/main.cc \
$(SOURCE_DIR)/parameter_manager_lj_molecule.h \
$(SOURCE_DIR)/parameter_manager_lj_molecule.cpp \
$(SOURCE_DIR)/parameter_manager.h \
$(SOURCE_DIR)/parameter_manager.cpp \
$(SOURCE_DIR)/parser.h \
$(SOURCE_DIR)/parser.cpp \
$(SOURCE_DIR)/common.h
PARAM_UT_DATA := $(DATA_DIR_TESTS)/molecule_test/par_oxalate_and_friends.inp …Run Code Online (Sandbox Code Playgroud) 我想写一个模块,它重新导出一些已导入的模块.像这样的东西:
module Foo.A
( module Foo.B
, module Foo.C
) where
import qualified Foo.B
import qualified Foo.C
-- bunch of code using Foo.B and Foo.C here
Run Code Online (Sandbox Code Playgroud)
这看起来应该有效; 但是,GHC会打印有关出口的警告:
Foo/A.hs:2:5:
Warning: the export item `module Foo.B' exports nothing
Foo/A.hs:3:5:
Warning: the export item `module Foo.C' exports nothing
Run Code Online (Sandbox Code Playgroud)
GHCI拒绝加载他们的出口.
我可以通过使导入不合格来解决这个问题,但是这些导入和主模块代码之间可能会出现命名冲突.
有没有办法让GHC导出这些模块?
我们使用git post-receive hook来自动缩小我们的JS并同步我们的本地和远程开发数据库.
这通常是可取的,但有时不是.
反正是否有一个参数从git push传递给post-receive钩子,所以这可以在需要时被禁用?
谢谢!
boost的专用迭代器适配器的文档声明boost::reverse_iterator"纠正了C++ 98的std :: reverse_iterator的许多缺点."
这些缺点是什么?我似乎无法找到这些缺点的描述.
后续问题:
boost :: reverse_iterator如何纠正这些缺点?
我有一个文本框,我正在尝试使用以下代码行打印到它:
logfiletextbox.Text = logfiletextbox.Text + "\n\n\n\n\n" + o + " copied to " + folderlabel2.Text;
Run Code Online (Sandbox Code Playgroud)
其中folderlabel 2显然是一个文本框.我放入的第一件事是相同的文本框,因此不会删除任何文本.过多的新行证明了我的问题,因为文本框中没有新行(是的,设置为多行)."o"在FileInfo数组中是FileInfo类型.
为什么这些新行不会出现在文本框中?
我问一个代码片段,其中包含一个unicode文本,将另一个unicode one连接到第一个unicode文本,然后将cout连接到结果.
PS此代码将帮助我解决unicode的另一个更大的问题.但在关键是要完成我的要求之前.
ADDED:BTW我在运行可执行文件时无法在命令行中写入任何unicode符号.我应该怎么做?