这是其中之一"肯定有一些通用实用程序比我提出的快速和肮脏的东西更好"问题.就像我一样,我知道如何以几种临时方式做到这一点,但是我喜欢使用标准.
简介:我正在寻找合理的标准和无处不在的工具来确定我目前的地理位置.可从Linux/UNIX命令行,Perl,Emacs等调用.
详情:
一个微不足道的情况激发了这个问题(但毫无疑问,更重要的应用程序):我使用emacs org-mode,经常记录日志或日记.我实际上并没有太多使用官方组织模式日记 - 主要是,我将时间戳放在普通的组织模式日志中,隐藏在看起来像链接的元数据中.
[[metadata: timestamp="<2014-01-04 15:02:35 EST, Saturday, January 4, WW01>" <location location="??" timestamp="??"/>][03:02 PM]]
Run Code Online (Sandbox Code Playgroud)
如你所见,我很久以前就添加了记录我位置的功能.但到目前为止我不得不手动设置它.我很懒,经常忽略手动设置位置.(次要注意:我记录了我最后一次手动设置位置,在移动时有用,而忽略了手动更改我的位置.
我更希望有自动推断我的位置的代码.特别是因为我上个月旅行的时间相当多,但是对于我每天都在这里工作的六个地方来说可能更有用:家庭,工作,海边,标准餐厅,我在吃午餐或早餐. .
我可以使用任何一种工具来计算我的位置,例如
我在哪里 - 在Google地图上查看您当前的位置 - ctrlq.org/maps/where/
Perl CPAN包,例如IP :: Location - 将IP地址映射到某个位置
和启发式,如查看WiFi SSID等.
我已经编写了一些东西.
但是......这比我编码的更深入.
上述技术都不是完美的 - 例如,我可能没有net.connectivity等.有些是特定于操作系统的.
如果已经有一些开源设施,我应该使用它.
因此我的问题是:有没有合理无处不在的地理位置服务?
我的收藏
跨越OS操作
命令行实用程序
可以连接到广泛可用的标准地理定位服务
即使无法连接到标准地理定位服务或Internet,也能正常工作
定制
学到了
非常简短
如何创建一个包含所有位的无符号常量?
...您可以使用{} s初始化字段,
......没有得到GCC 4.7.2的警告.
以下不满意:
struct U { unsigned ufield; };
struct Uc { unsigned char ufield; };
struct ULL { unsigned long long ufield; };
struct U32 { unsigned ufield; };
struct U64 { uint64_t ufield; }
typedef
//any of the above U Uc ULL U32 U64, we will arbitrarily choose:
U Ueg;
// somewhere far away
Ueg u = {-1}; // well defined by C standard, GCC 4.7.2 -Wnarrowing warning
Ueg u = {~0U}; // finit …Run Code Online (Sandbox Code Playgroud) 重新定义断言宏是不是很邪恶?
有些人建议使用自己的宏ASSERT(cond)而不是重新定义现有的标准断言(cond)宏.但是如果你有很多遗留代码使用assert(),你不想让源代码改变,你想拦截,规范,断言报告,这没有用.
我已经做好了
#undef assert
#define assert(cond) ... my own assert code ...
Run Code Online (Sandbox Code Playgroud)
在上面的情况 - 代码已经使用断言,我想扩展断言失败的行为 - 当我想做像
1)打印额外的错误信息,使断言更有用
2)在断言上自动调用调试器或堆栈跟踪
通过实现SIGABRT信号处理程序,可以在不重新定义断言的情况下完成...,2).
3)将断言失败转换为抛出.
...这个,3),不能由信号处理程序完成 - 因为你不能从信号处理程序中抛出C++异常.(至少不可靠.)
为什么我想要断言抛出?堆叠错误处理.
我通常不会这样做,因为我希望程序在断言后继续运行(虽然见下文),但是因为我喜欢使用异常来提供更好的错误上下文.我经常这样做:
int main() {
try { some_code(); }
catch(...) {
std::string err = "exception caught in command foo";
std::cerr << err;
exit(1);;
}
}
void some_code() {
try { some_other_code(); }
catch(...) {
std::string err = "exception caught when trying to set up directories";
std::cerr << err;
throw "unhandled exception, throwing to add more …Run Code Online (Sandbox Code Playgroud) Class和Namespace都有?
这个问题是关于我看到自己越来越多地使用的模式:为相关概念提供类和命名空间.我认为这主要是由C++语言工件推动的,但并非完全如此.
我认为最高级别的问题是:这是个好主意吗?同时具有相关概念的类和命名空间?
较低级别的问题:
做这个的最好方式是什么?
嵌套在命名空间中的类?:
namespace Foo_Namespace {
class Foo_Class {
...
};
}
Run Code Online (Sandbox Code Playgroud)
或者是单独的,对等的,类和命名空间?:
class Foo_Class {
...
};
namespace Foo_Namespace {
// non-class free functions, etc.
}
Run Code Online (Sandbox Code Playgroud)
我必须承认,我倾向于在命名空间中嵌套类.即使它导致丑陋的名字.但即使我这样做,我应该使用哪些命名约定:
以下内容太长,导致名称Foo_Namespace :: Foo_Class非常难看
namespace Foo_Namespace {
class Foo_Class {
...
};
}
Run Code Online (Sandbox Code Playgroud)
没有必要在名称中使用任何后缀或指示符:
namespace Foo {
class Foo {
...
};
}
Run Code Online (Sandbox Code Playgroud)
但是当我看到Foo :: bar()时,我发现自己不确定,如果它是namespace :: Foo中的自由函数栏,即:: Foo :: bar(),或者名称空间中的类Foo中的成员函数::富::富::酒吧().
像:: Foo :: Foo :: bar这样的名字仍然没有,嗯,很好.
目前我在做
没有必要在名称中使用任何后缀或指示符:
namespace Foo_ns {
class Foo {
...
};
}
Run Code Online (Sandbox Code Playgroud)
主要是因为我通常先创建类,然后再认识到命名空间会很好.
我想知道是否应该恢复我多年来没有使用过的命名约定:_c用于类,_ns用于命名空间: …
我如何(1)启动一个新的csh,(2)强制它执行一些不在任何.cshrc中的命令(尽管我可以安排它们在非标准位置来源)和(3)然后去互动?
例如,除了http://www.manpagez.com/man/1/tcsh/中描述的那些之外,有没有办法让csh或tcsh起诉备用启动文件,
启动和关闭登录shell首先执行系统文件/etc/csh.cshrc和/etc/csh.login中的命令.然后它从用户主目录中的文件执行命令:first~/.tcshrc(+)或者,如果找不到〜/ .tcshrc,〜/ .cshrc,那么〜/ .history(或者是histfile shell变量的值) ),然后是〜/ .login,最后是〜/ .cshdirs(或dirsfile shell变量的值)(+).shell之前可以读取/etc/csh.login而不是之后的/etc/csh.cshrc和〜/ .login而不是〜/ .tcshrc或〜/ .cshrc和〜/ .history之后,如果这样编译的话; 看到版本的shell变量.(+)
Non-login shells read only /etc/csh.cshrc and ~/.tcshrc or ~/.cshrc
Run Code Online (Sandbox Code Playgroud)
我是一个bash用户.但我在一家硬件公司工作,其中(1)许多人都是csh用户,(2)许多CAD工具依赖于环境中的东西,例如模块系统.
许多食谱 - 例如人们解释如何做事的内部维基页面 - 从类似的东西开始
start a new shell or xterm
source /proj/Foo/setup.proj
source ~some_engineer/env/setup-for-this-tool
now run the tool
Run Code Online (Sandbox Code Playgroud)
环境变量经常发生冲突; 有时我必须删除所有的〜/.*文件,重新删除ssh等.
我想自动化其中许多.实际上,我已将其中许多自动化.但是,我必须使用expect(实际上是Perl CPAN Expect)来自动化它们,以伪装成交互式用户.
一路上,我有自己的脚本clear-env,我经常使用它来启动一个几乎没有环境变量的shell.因此使用:
clear-env -keep HOME -- csh
and then either pipe commands in through expect
or run interactively
Run Code Online (Sandbox Code Playgroud)
这适用于自动化.但有时我确实需要交互 - 但只有在我加载了几行长源脚本名称之后.
我希望能够加载源文件,然后回退到交互式.
我试过了
clear-env -keep HOME …Run Code Online (Sandbox Code Playgroud) 问:有没有办法在emacs org-mode中进行翻译?
通过"transclusion",我的意思是,在fileA.org和fileB.org中的某些内容,"包括"fileInc.org - 并且来自fileInc.org的树出现在两个地方.实际上看起来,不只是被链接到.(可能具有条件包含,变换,例如嵌套深度(***的数量)).
我知道#setupfile,但这似乎只适用于模式,而不是真正的文本.
我知道http://orgmode.org/manual/Include-files.html,但AFAIK只在出口时工作.
我正在寻找在普通的emacs org-mode缓冲区中工作的东西.(实际上,在非组织模式缓冲区中工作的东西可能会很好.)
我有锅炉板,我想包含在多个文件中.
这样的事情存在吗?
在Perl中,我被一些看起来像下面的bug的东西咬了一口:
package Foo;
sub method {
my $self = shift;
my @args = @_;
...
}
Run Code Online (Sandbox Code Playgroud)
我把它称为子程序,而不是方法:
Foo::method( "arg1", "arg2" );
Run Code Online (Sandbox Code Playgroud)
而不是将其称为方法 - 在这种情况下,它是一个"类方法":
Foo->method( "arg1", "arg2" );
Run Code Online (Sandbox Code Playgroud)
调用Foo :: method("arg1","arg2")导致"arg1"被删除.
使用"对象方法"可能会出现类似的注意事项:
my $object = Foo->new();
$obj->method( "arg1", "arg2" );
Run Code Online (Sandbox Code Playgroud)
是否有一个友好,简洁的Perl习惯用于检查传统上调用的第一个参数$self实际上是类(包)和/或类/包名称中的对象?
我想出的最好的是:
package Foo;
sub method {
my $self = ($_[0]->isa(__PACKAGE__) ? shift @_ : die "...error message...";
my @args = @_;
...
}
Run Code Online (Sandbox Code Playgroud)
这并不简单
package Foo;
sub method {
my $self = shift;
die "...error message..." if …Run Code Online (Sandbox Code Playgroud) 简短的问题
在Perl代码库中一致表示真假的最佳方法是什么?
1/ 0?
1/ Perl的本机布尔运算符
返回的特殊空字符串?
undef?
() (即空列表)?
问题背景
我们都知道Perl在布尔方面非常灵活,就像大多数事情一样.
例如,Perl将以下内容视为false:,undef()数字0(即使写为000或0.0),空字符串'0'(包含单个0位的字符串).Perl将以下作为真:任何其他的标量值,1,-1,在它(一个空格的字符串' '),'00'多个0的串,"0\n"(跟着一个新行"0"), , 'true','false','undef'等等另外,基于阵列to-scalar和list-to-scalar转换意味着你可以经常使用空数组作为假值.(感谢http://perlmaven.com/boolean-values-in-perl获取Perl接受为真或假的标量值的部分列表.)
但是考虑到所有这些被视为true或false的值,Perl布尔函数应该返回什么?
1/0-1/0 (全息)1/undef1/""如果您使用这些约定中的任何一个,您将很快发现您编写的代码的行为与普通的Perl代码不同.您将无法取代$a<$b 的custom_less_than($a,$b),并有它的工作原理完全相同.
考虑:
> perl -e 'use warnings;
sub my_eq { return ( $_[0]==$_[1] ? 1 : 0 ) }
print "compare (1==0) <<".(1==0).">>"
." to my_eq(1,0) <<".my_eq(1,0).">>" …Run Code Online (Sandbox Code Playgroud) 我真的想用org-mode.
但是,我想使用org-mode来理解已经使用不同的标题语法编写的结构化文档,
例如使用twiki的--- +
---+ H1
Top level
---++ H2
Nested
---+ H1 #2
Second top level
Run Code Online (Sandbox Code Playgroud)
或者像mediawiki一样
= H1 =
Top level
== H2 ==
Nested
= H1 #2 =
Second top level
Run Code Online (Sandbox Code Playgroud)
我想拥有组织模式折叠的所有优点,只需使用这些不同的标题样式.
实际上,更糟糕的是:
我想,比如,twiki或mediawaiki标题优先于组织模式星号标题.但我想两者都在使用.
= H1 =
Top level
* this is a list
** nested
* list
** nested
== H2 ==
Nested
= H1 #2 =
Second top level
Run Code Online (Sandbox Code Playgroud)
- +到目前为止我尝试过的
我已经能够使用轮廓模式来处理twiki,例如via
---+ Emacs stuff
# try (defvar twiki-outline-regexp "---+\\++ \\|\\(\\(?: \\)+\\)[0-9*] ")
Local Variables: …Run Code Online (Sandbox Code Playgroud) 简要:
我希望有两个(或更多)"开发流"/环境相互跟踪,在两个方向之间相互发送变化,而不会完全收敛 - 同时保留某些关键,必要的差异?
详细信息,一个特定示例:
这是一个特例:
我一直是控制我的主目录的版本,glew-home,因为,哦,28年.RCS,SCCS,许多RCS包装器,CVS,SVN,早期DVCS的短暂实验,如Monotone和Darcs,bzr,git和现在的Mercurial.目前我主要使用Mercurial,尽管我会根据需要跳回git或bzr.
现在,我的主目录在许多系统上都类似,但不完全相同.最大的区别在于Cygwin与工作中的各种Linux.我试图让它们尽可能地微笑,但是出现差异,并且经常需要坚持下去.
以下是差异的一个小例子:在Cygwin上,在我个人拥有的笔记本电脑上,〜/ LOG是〜/ LOG.dir/LOG.cygwin.glew-home的符号链接,而在工作中〜/ LOG是一个符号链接到某个东西喜欢〜/ work/LOG.dir/LOG.work.
原因:任何专有需要留在工作中.〜/ work是一个单独的存储库,〜/ work/.hg,不会被推/拉或以其他方式与我的个人计算机同步.
问题:我想保持这些符号链接(和其他几个文件)不同.但我想同步所有其他文件.我在两个地方都改变了我的环境.如果我在工作中改变我的〜/ .emacs,我想把它发回家,反之亦然.
问:我怎样才能最方便地做到这一点?
在过去的糟糕时期,我会使用一个共同的存储库,比如一个常见的CVS回购.CVS不处理符号链接,但是说我有一个脚本从存储在CVS中的模板生成符号链接.我会安排〜/ LOG的符号链接模板为我的cygwin-laptop和工作提供不同的分支.我会创建工作区,大多数文件指向相应的RCS/CVS repos的同一分支,而cygwin-linux和work之间不同的文件会将相应的分支签出到相应的工作区.
这很有效,虽然维持起来有点痛苦.
我还没有想出一个使用现代DVCS的好方法,比如Mercurial(或Got或Bzr).
这些现代DVCS工具执行整个repo分支,而不是按文件分支.他们不理解两个分支的概念,这两个分支对于大多数文件是相同的,但仅在某些文件中有所不同.
当我试图跟踪两个分支时,我总是最终传播出必要的差异.
有些人建议Makefiles.不吸引人.
我已经考虑过必要的改变基础转换,并不断变基础.但我不喜欢那么反驳.
更好的想法赞赏.
被子?
简介:可以以任何方式扩展组织模式标签中允许的字符吗?
例如包括 -,破折号?
细节:
我懂了
http://orgmode.org/org.html#Tags
标签是包含字母、数字、“_”和“@”的普通单词。标签前后必须有一个冒号,例如,':work:'。
我有点惊讶这是不可扩展的。是吗,我错过了吗?
TODO 关键字可以包含破折号。有时,我想将 TODO 视为可与标签互混的 - 例如,将 TODO 移动到标签,反之亦然 - 但这种语法差异会阻碍。
在我开始编码之前,有谁知道为什么不允许使用破折号?我猜想与时间戳混淆。
我寻求建议是否使用./*这与 - >/this,即C++(*this).chained().methods()与this-> chained() - > methods().
顺便说一句,目前我见过的大多数页面都推荐[[C++(*this).chained().methods()]].
我只是想知道,因为你做不到
My_Class object.chained().methods();
(顺便说一句,我没有在第一部分中测试过这些例子.我在第二部分提供了测试的例子.)
你必须这样做
My_Class对象;
object.chained()方法();
这是一个恼人的额外线
或者你可以做到
Run Code Online (Sandbox Code Playgroud)My_Class object = My_Class().object.chained().methods();
这需要一个值复制 - 如果构造函数有副作用,这是不可接受的,比如注册对象实例 - 就像许多Knobs库一样
或者你可以做到
Run Code Online (Sandbox Code Playgroud)My_Class* object_ptr = *(new My_Class).object.chained().methods();
哪个有效,但需要烦人的*(ptr)
或者你可以做到
Run Code Online (Sandbox Code Playgroud)My_Class* object_ptr = (new My_Class)->object.chained()->methods();
这是一个更好的青少年.
我想你可以做到
My_Class&object_ref(My_Class().chained().methods());
而且我不确定我对此的看法.
顺便说一句,我不需要调试帮助.
我一直在编写这样的东西我只是为了清楚起见我提供的例子.
我正在寻求样式建议,因为有几种方法可以对它进行编码,而且我使用了不同的库来以相反的方式进行编码.
混合它们很难看:
My_Object_with_Setters* object_ptr2 = &((new My_Object_with_Setters)->set_R1(1).set_P1(2)->set_R1(3))
My_Object().method_returning_ptr()->method_returning_ref();
Run Code Online (Sandbox Code Playgroud)
也许它不是那么糟糕......但它肯定会令人困惑.
当我遇到使用混合.chained() - > methods()的两个不同库的代码时,我有时希望能够使用postfix地址和解除引用运算符
My_Object*mptr = My_Object().somethod_returning_ptr() - > method_returning_ref - >&
我经常使用这个习惯用于setter函数
class My_Object_with_Setters {
public:
static int count;
int value;
public: …Run Code Online (Sandbox Code Playgroud) 简介:这样做是否安全
namespace Foo {
#include "bar"
}
Run Code Online (Sandbox Code Playgroud)
在你轻率地拒绝之前,我想我有一些规则允许它相当安全.
但我不喜欢它们,因为它们要求包装器单独包含所需的所有全局范围标头.虽然这可以容忍,但如果我们想象包含在命名空间内只是一个特殊的管理功能.
总的来说,externs和forward声明在命名空间内不能很好地工作.
所以我猜我正在问
a)还有什么其他的问题
b)有更好的方法
== A [[Header-only library]] ==
我喜欢写图书馆.[[仅限标题库和链接库]].
例如
#include "Valid.hpp"
Run Code Online (Sandbox Code Playgroud)
为简单的包装器类型定义模板Valid.
(不要陷入困境"你应该使用一些标准库而不是你自己的.这是一个例子.如果Boost或C++已经标准化,我不知道.我一直在使用包装器,因为模板被添加到C++中. )
另外,让我们说,它是一个仅头文件库,它在Valid.hpp中定义了一个打印函数
std :: string to_string(const Valid&v){std :: ostringstream oss; if(v.valid()){oss << v; } else {"invalid"; } return oss.str(); }
因为我认为这是正确的做法,我有Valid.hpp包括它依赖的头:
Valid.hpp:
#include <iostream>
#include <sstream>
template<typename T>
class Valid {
private:
T value_;
bool valid_
...
};
...
std::string to_string( const Valid<T>& v ) { ...
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
我可以直截了当地使用Valid.
==名称冲突 - 尝试在命名空间内使用include来解决==
但有时会发生碰撞.有时别人有自己的有效.
命名空间救援,对吧?但我不想更改所有现有代码以使用命名空间.所以,我在一个有碰撞的新项目中受到诱惑
namespace AG …Run Code Online (Sandbox Code Playgroud)