小编Fla*_*ino的帖子

语义,标准和标记中的源代码使用"lang"属性

我无法找到以下的授权解释,微格式或指南,所以我把它打开了.如果我错过了什么,请说出来!

假设您有一个HTML页面,其中包含<pre>元素中某些编程源代码的示例:

<pre>
    # code...
</pre>
Run Code Online (Sandbox Code Playgroud)

(更新:正如Pekka在下面指出的那样,<code>可能会比<pre>以下示例/讨论更好.但正如Brian Campbell指出这两个元素当然应该用于预先格式化的代码)

现在:你如何-在一个语义正确,规范兼容的方式-声明编程语言<pre>块的内容是什么?

这将是以语义一致的方式包含在标记中的有用信息.

从语义的角度来看,明显的选择是使用lang属性:

<pre lang="ruby">
Run Code Online (Sandbox Code Playgroud)

根据HTML 4规范,第8.1.1节:

lang属性的值是标识自然语言的语言代码[...]计算机语言明确地从语言代码中排除.

(强调我的)

此外,"ruby"无论如何都不是标准的语言代码.

该规范允许使用x主标记添加"实验"或"私人使用"代码.规范的例子是lang="x-klingon".

从理论上讲,你可以使用x-ruby,x-java等等来声明<pre>块中包含的lang编程语言- 除了看起来一般情况下使用该属性编程语言的规范.

关于该主题HTML 5规范并没有更清楚.规范本身没有明确提到"自然"与"编程"语言.相反,它将读者引用到BCP 47,它再次声明:

语言标签用于帮助识别语言[...],但不包括主要用于人类交流的语言,例如编程语言.

但是,它继续提及(在第4.1节,第56页)zxx主要语言子标签,其中:

标识语言分类不适合或不适用的内容.一些示例可能包括乐器或电子音乐或编程源代码.

(强调我的)

同样,规范似乎与自身相矛盾,但它开辟了使用zxx-x-ruby(或类似)作为一种完全符合规范的方式的可能性,既宣称要用语言编写的东西(只是不是人类语言)声明特定的(涉及非人类语言.

那么,有没有一个标准/微格式/ …

html standards web-standards semantic-markup

19
推荐指数
1
解决办法
5125
查看次数

Ruby中命名空间函数的最佳实践?(新手问题)

(StackOverflow告诉我这个问题是"主观的,可能会被关闭"......好吧,无论如何,我会试一试)

我正在编写一堆辅助方法(对于TextMate包),我想(并且我需要)将它们整齐地命名为.

这些方法实际上只是函数,即它们不在自己范围之外的任何东西上运行,因此并不真正属于一个类.没有什么需要实例化的.

到目前为止,我一直在这样做,这很好

module Helpers::Foo
    module_function
    def bar
        # ...
    end
end
Helpers::Foo.bar # this is how I'd like to call the method/function
Run Code Online (Sandbox Code Playgroud)

但是它会更好:
1.跳过module_function并声明方法/功能为self.*
2.或者声明一个类而不是一个模块会更好吗?
3.还是使用class << self(在模块或类中)?
还是别的什么呢?

我意识到这是一个非常开放的问题,但我真的只是想听听人们在做什么.

ruby namespaces

11
推荐指数
1
解决办法
1570
查看次数

AppleScript:如何检查某些内容是目录还是文件

更新:解决方案如下


假设您有Finder中所选项目的列表.假设有一些文件,文件夹,各种捆绑包,甚至包含在选择中的一些应用程序.

现在说你只想要那些(在UNIX术语中)目录的项目.也就是说,你只需要cd在终端中可以使用的物品.

您可以检查每个项目的kind属性,看它是否等于"文件夹",但这对应用程序包或其他包/包不起作用,尽管它们实际上是"文件夹"(目录)

如果项目是实际文件对象(而不是别名),则可以检查每个项目的class属性...除了并不总是有效之外,因为bundle现在是"文档文件"实例,而应用程序是"应用程序文件"实例.

如果你只有一个别名列表而不是实际的文件对象,那就更糟了,因为你无法检查class属性; 它总是只会说"别名".

我能想到的唯一解决方案是获取每个项目的POSIX路径,并查看它是否有正斜杠,或者将其路径发送到用不同语言编写的脚本,这可以检查某个目录是否是某个目录或不.

这两个想法对我来说都很疯狂.检查尾随斜杠是非常hacky和脆弱的,并将所有内容提供给不同的脚本是完全矫枉过正的.


更新: Asmus建议下面看起来确实是唯一一个很好的解决方案,因为似乎AppleScript无法自行解决这个问题:

do shell script "file -b " & filePosixPath
Run Code Online (Sandbox Code Playgroud)

这将返回文件夹,包,应用程序,软件包等的字符串"目录".
但请注意(!)对于磁盘,它返回"粘性目录".

这是一个非常好用的通用函数

on isDirectory(someItem) -- someItem is a file reference
    set filePosixPath to quoted form of (POSIX path of (someItem as alias))
    set fileType to (do shell script "file -b " & filePosixPath)
    if fileType ends with "directory" then return true
    return false
end isDirectory
Run Code Online (Sandbox Code Playgroud)

applescript

9
推荐指数
1
解决办法
7489
查看次数

以编程方式将列(带有绑定)添加到基于视图的NSTableView?

我有一个简单的应用程序列出了一些模型NSTableView.

该表是一个完全标准的基于视图的表,包含几列,并通过NSArrayController使用绑定进行填充.所有这些都是在Interface Builder中设置的,它可以正常工作.

现在,我想以编程方式添加更多列,并将这些新列绑定到模型中的各种键路径.在那里,我被困住了.

为简单起见,假设此设置:

  1. Model对象是只有一个NSString属性的普通对象: name
  2. AppDelegate有一个NSArray属性(models),它包含许多Model实例.
  3. NSArrayController content绑定到应用程序委托的models数组.
  4. NSTableView content绑定到阵列控制器arrangedObjects.
  5. 表的第一列绑定(在IB中)以显示name属性,即列→表格单元格视图→静态文本表格视图单元格→ 绑定到表格单元格视图的objectValue.name

据我所知,这是直截了当的,并且通过这本书,它就像一个魅力.

但是......如何添加更多列呢?

要以编程方式添加列(为了简单起见,我们只是说这个新列应该只显示name属性,就像已经存在的列一样),我想我会在app delegate中做这样的事情:

NSTableColumn* newColumn = [[NSTableColumn alloc] initWithIdentifier:@"newColumn"];

// do binding magic somehow
// [[newColumn dataCell] bind:NSValueBinding toObject:??? withKeyPath:??? options:nil];

[self.table addColumn:newColumn]; // the table's connected with an IBOutlet
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多从/到数据单元,表,列,数组控制器,数组本身以及各种键路径的绑定组合,但没有任何作用.新列添加得很好,但它从未填充过.

我想我创建的基本NSTableColumn实例是基于单元格的,而不是基于视图的,这会造成麻烦.但是,我不知道如何从这里开始,文档从不谈论以编程方式添加的绑定列.

在这种情况下,我想要的只是一个简单的文本列,绑定到模型,就像我可以轻松设置IB的那样.

我可以通过实现NSTableViewDataSource和"手动"输入表来完成所有这些操作,但我已经完成了其他所有已经设置的绑定.

任何帮助将不胜感激.

cocoa nstableview nstablecolumn cocoa-bindings

9
推荐指数
1
解决办法
4414
查看次数

Javascript名称空间和条件包含

我用这种方式组织了一些js文件(参见源代码):

  • gmaps4rails.base.js :包含所有逻辑

    • gmaps4rails.googlemaps.js :包含函数

    • gmaps4rails.bing.js :包含与前一个文件同名的函数

所以基本上,base要求createMarkers()其在两个googlemapsbing.

从现在开始,我加载中只有一个是gmaps4rails.googlemaps.jsgmaps4rails.googlemaps.js,取决于地图API,我需要,所以它工作正常.

现在我希望能够加载所有文件(并将它们分开)但当然只包含所需地图API的代码.

基本上我想的是:

if desiredApi == "googlemaps"
   include GoogleMapsNameSpace content in BaseNameSpace
Run Code Online (Sandbox Code Playgroud)

提前致谢.

javascript ruby-on-rails

8
推荐指数
1
解决办法
582
查看次数

Warden auth失败后,Rails日志中没有状态代码

我已经设置了带有--api标志的Rails 5(5.0.0.rc1)应用程序.它使用Warden进行身份验证.

这一切都有效,除了当Warden身份验证失败时,响应未被正确记录.日志看起来像这样:

Started GET "/widgets.json" for ::1 at 2016-06-14 11:38:20 +0000
Processing by WidgetsController#index as JSON
Completed   in 0ms (ActiveRecord: 0.0ms)
Run Code Online (Sandbox Code Playgroud)

或者,在生产中:

I, [2016-06-14T14:12:54.938271 #17625]  INFO -- : [db39f895-eeb1-4861-91d0-5d52c124e37a] Completed   in 1ms (ActiveRecord: 0.0ms)
Run Code Online (Sandbox Code Playgroud)

它当然应该说Completed 401 Unauthorized in...,但无论出于何种原因,它都不知道响应的状态代码.

Warden身份验证错误被发送到Rack兼容的ActionController::Metal控制器,非常简单:

class UnauthorizedController < ActionController::Metal
  include ActionController::Head

  def self.call(env)
    @respond ||= action(:respond)
    @respond.call(env)
  end

  def respond
    head :unauthorized
  end
end
Run Code Online (Sandbox Code Playgroud)

它使用基本head方法来响应(不需要渲染任何东西),所以可能它的行为与head在常规Rails控制器中使用的行为相同.但不是.

如果我尝试使用redirect_to ...render ...(包括相关模块之后)也会发生同样的事情.所以在Rack→Rails→Warden→Warden failure app(控制器)的某个地方,响应的状态代码丢失了.日志知道开始记录请求,并知道它已被处理,因为它显然吐出了"已完成..." - …

logging rack ruby-on-rails warden

8
推荐指数
1
解决办法
501
查看次数

Rails应用程序作为LDAP或CardDAV服务器?

我正在开发一个内部Rails应用程序,它是(除其他外)一个CRM应用程序,因此它包含客户和其他联系人的姓名,地址等.
一个简洁的功能是允许客户端提取/搜索这些联系人,例如电子邮件程序和地址簿应用程序(即只是简单的只读访问).

我们的想法是使用LDAP或CardDAV,但我没有太多(最近)有关如何实现它的信息.

对于CardDAV,我基本上没找到任何东西.

对于LDAP,我发现了大量的LDAP 客户端宝石和插件,但只有少数LDAP 服务器实现.到目前为止我发现的是纯粹的Ruby LDAP服务器LDAP-ActiveRecord-gateway,它建立在前者之上.

后者听起来很适合这张票,但它明确地说"没有替换就贬值"(今年6月).它可能仍然有用,但我不能说我太热衷于使用它,因为它已经被抛弃了.

所以我想知道那里有没有更近的东西?我可以使用一些自动化宝石或插件吗?或者我可以挖掘的一些线索,提示或教程?虽然我不是自己写的东西,但我宁愿避免这样做.

ruby webdav ldap ruby-on-rails addressbook

7
推荐指数
1
解决办法
2226
查看次数

使用NSView实例作为NSDictionary键?

我正在尝试创建一组半复杂的视图动画(想想一个NSMatrix表单的动画版本,其中行在添加或删除其他行时滑动),并构建动画我正在制作一个小帮助类.

在那里,我必须跟踪不同的视图,他们的有序索引,以及与他们的动画相关的一些其他值.

为此,我正在使用一个NSArray实例来跟踪视图的排序(索引),并且我想使用NSDictionary带有视图作为键来跟踪值(值本身在嵌套字典中) ).即我希望能够做一些这样的事情,例如(伪代码):

NSMutableDictionary* viewValuesDict = [NSDictionary dictionary];

// Loop thru an ordered NSArray
for( (NSView*) view in viewsArray ) {
    // Get some values we'll need later
    NSDictionary* associatedValues = [view getSomeValues];

    // ...and put them into viewValuesDict...
    [viewValuesDict setObject:associatedValues forKey:view];

    // and then things break because the NSView 'view'
    // doesn't support copyWithZone.... darn
}
Run Code Online (Sandbox Code Playgroud)

问题是,我当然不能将NSView实例用作字典键,因为键是使用添加的copyWithZone,而NSView不是实现.

那么,为NSView实例获取唯一键的好方法是什么?我可以想象使用,[obj description]因为你得到的内存地址是一个完美的UID,但当然系统必须使用任何类型的NSView子类,可能完全返回其他东西,所以这是不好的. …

cocoa objective-c nsdictionary nsview

3
推荐指数
1
解决办法
914
查看次数

代码只有在我记录一些值时才有效 - 但为什么呢?

我正在编写一个简单的QR代码生成器(只是为了好玩和学习一些Obj-C),我正在研究连接的"模块"的轮廓(即组成QR代码的黑色方块).这是为了获得更好的矢量输出,而不是简单地为每个模块制作一堆rects.

长话短说,我的大纲跟踪代码工作 - 但是,如果我确保在特定的地方调用NSLog!如果我删除NSLog-call,代码循环!我实际上除了记录之外什么都不做.我记录的内容并不重要; 我只需要打电话给NSLog或事情.

跟踪算法很简单:顺时针绕连接模块的形状.当你碰到一个角落时,向右转,直到你回到跟随形状的轮廓.再次到达起点时停止.形状可以有两个共享角点的模块.因此,跟踪循环将达到该点两次.这是预期的,代码正确处理它 - 如果我打电话NSLog.

否则,代码会说某个点在第一次看到它时是一个角落,而第二次不是一个角落,这会导致跟踪循环.检测是否某个角点不依赖于除了点的x和y坐标以及模块对象数组之外的任何东西 - 但是在跟踪进行时模块和数组都没有变化,所以给定相同的x,你应该总是得到相同的结果.它确实 - 如果我打电话NSLog.

没有NSLog,坐标 - 例如(10,9) - 是时刻的角落,稍后(10,9)突然没有被识别为角落.但是一个NSLog-call,(10,9)正确每次都被视为一个角点.

再说一次:我绝对没有改变; 我只是记录一些东西 - 什么!突然它起作用了.这就像它说2 == 2是真还是假,除非我告诉它记录2和2,在这种情况下2 == 2总是正确,因为它应该是.

这是片状代码.脱离背景很难理解,但是有很多背景,所以我希望这已经足够了.一切都是整数(没有模糊的浮点值).

do { // start going around the shape

    // If this isn't here or simply commented out, the code loops.
    NSLog(@"foobar"); // doesn't matter what I log …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nslog

2
推荐指数
1
解决办法
636
查看次数