Timur Safin · Mar 25, 2016 go to post

I'd expect it supported via this set of share tools

but apparently it just sends the link to the given address. Ok, you need page scraper then - and the easiest tool for this I know is uKeeper by Umputun (very famous in Russian IT podcaster, one of voices of "Radio-T" podcast).

P.S.

It's quite normal for all "share-buttons" to just send a link with title and not sending full content, they are all intending to be used in social networks where text length limitation is the major factor.

If you need article content to get delivered to your email "inbox" - use RSS subscriptions and RSS-enabled mailer. Like Microsoft Outlook :)

Timur Safin · Mar 15, 2016 go to post

This new Q&A interface is not very intuitive and that we get used to elsewhere (e.g. in SO). If we want to make it resembling StackOverflow closer then it should allow comment of the original question, without providing answer yet.

Timur Safin · Mar 7, 2016 go to post

Though, returning to the original topic, about "Highest Rating" flter, it would be highly unexpected to see it keeping Newest order, expectations are that it would return in ranking order (inside of which, for equal rankings it might sort by modification time). 

Timur Safin · Mar 7, 2016 go to post

No, IIRC, consensus was about slight different formula - sorting by Max(PostDate, LastCommentDate) DESC which is quite different to "ordered by the latest posts, then posts with the latest comments, DESC".

Even very old post after new comment should go to the top of list for Newest filtering mode. If it's hard to implement such Max aggregation function in Drupal then I'd try to directly update post date/time on each new comment...

Timur Safin · Mar 7, 2016 go to post

IMVHO, threading is useful, very useful, even in such micro-context as discussion after proposed answer in the StackOverflow [as you introduce in this newer change].

Once you killed threading, you could easily introduce unnecessary confusion of participants, for which it's becoming harder to comment on the relevant comment.

  1. Hope threading will not be killed in the "Article" mode;
  2. Hope threading will be added later to the Q&A mode, because it will simplify discussion.
Timur Safin · Mar 3, 2016 go to post

Yes, %Projection mechanism is quite convenient tool to automatically setup things upon simple recompilation.

Nikita Savchenko (author of this mentioned UMLExplorer ) is now working on an article for  HabraHabr site [in Russian] where he explains usage scenarious of that  %Projection facilities in more details. My assumptin is that soon after this post will be translated to English.

Here are few usage cases I was involved lately:

  • in the package manager I want to have easy to use facilitity which will allow to create package definition even for the sources directly loaded from GitHub. Something similar to package.json, but handled by $system.OBJ.Load() . So solution was to create projection class which will load package metadata definition at the end off package compilation - https://github.com/cpmteam/CPM/blob/master/CPM/Sample/PackageDefinition.cls.xml  
    You inherit your class from CPM.Utils.PackageDefinition, insert package.json definition part as XData block, and at the end of compilation stage you not only have your classes compiled, but also have registered them in the package manager as part of package [this will be necessary, for example, for package uninstall] 
  • I've discovered lately that despite the fact that WebSockets could be made working without any installation ste (i.e. you simple call appropriate CSP URL), but for REST handler you have to create web-application (https://community.intersystems.com/comment/3571#comment-3571) and the easiest solution was creation of special projection which would be creating nested web-application upon recompilation - https://github.com/intersystems-ru/iknowSocial/blob/master/TWReader/Setup.cls.xml , and regardless of a namespace it was installed to, and url of default CSP application assigned to this namespace this nested rest handler will still be available handy.
Timur Safin · Mar 3, 2016 go to post

But certainly, I should admit, any TextMate template based syntax highlighting system (like those used in the Atom or MS Code) will never be as precise as highlighting in Studio or Atelier.

Timur Safin · Mar 3, 2016 go to post

Some time ago, my previous favorite "lightweight" editor was Atom [1], and we even played with its integration with Caché some time ago. But now, due to multiple reasons, this project is stale, community people which was doing development gone, Atom broke their API multiple times (and still not fixed some fundamental issues, like lack of debugger API or editor limitations).

So after all these years I believe that Microsoft Code is better, faster, and smarter incarnation of Atom nowadays (their editor is much faster, they do already have refactoring and debugger API implemented). So, eventually, after Atelier API will be released  there will be better grounds for resurrection of similar projects, but with server-side already been taken care of via REST API...

[1] Ok, ok, there is Sublime text editor,  which  always was much, much faster than Atom. But extensions there should be written in Python (which I unfortunately dislike), so JavaScript based systems (like Atom, Code or Brackets) are much more preferable for me. At least from "hacking" pont of view.

Timur Safin · Mar 2, 2016 go to post

No, Dmitry, the original question is not about any presented or missing high-level language support, but rather about simplest approach to deal with iKnow data from any high-level language (in this case it looked like C++) working at client side.

Like like generation of C++ binding projection code is inevitable here.

Timur Safin · Feb 19, 2016 go to post

I love this! I needed PubSub-like services for the concurrent tweets processing and control of workers in the twitter api streaming mode sample and at the moment there is fragile, simplistic locking  schema used. I suspect PubSub will be better/more reliable, so I'll try to play with your classes.

But here are 1 questions:

  • why you didn't upload them to your intersystems-ib github repo?
  • and why these strange package names - IAT.S04.* and IAT.S05.*?

P.S.

It would be really nice if you would explain more details about API usage: I understand that UMLExplorer diagrams created are obvious and self-explanatory (wink) but more documentation never hurts... 

Timur Safin · Feb 18, 2016 go to post

Good question, it would be nice to know the list of supported (i.e. properly syntax highlighted) mimetypes.

I know that application/json is [almost] properly handled (with the exception of open brace). But what else? Even text/plain is marked invalid.

Class CPM.Sample.PackageDefinition Extends CPM.Utils.PackageDefinition
{

XData Package [ MimeType = application/json ]
{
{
        "name": "cpm-embedded-package-sample",
        "description": "CPM package sample with the embedded paсkage definition",
        "author": "tsafin",
        "version": "0.5.0",
        "license": "MIT",
        "dependencies": {
            "async": ">= 0.2.10",
            "fsplus": ">= 0.1.0",
            "language-cos": "https://github.com/UGroup/atom-language-cos.git"
        }
    }
}

} 
Timur Safin · Feb 12, 2016 go to post

Yeah, that was bad surprise for me recently. I could connect from client via websocket to any CSP class name (which is good thing). But I have to create separate web-application if I want to connect to %CSP.REST handler (which was quite unexpected). If I would not create separate application with their own dispatcher class then I'd receive strange 403 error (not authorized). 

This inconsistent treating REST and websocket makes no much sense for me, but unfortunately this is the way things are in %CSP.REST

Timur Safin · Feb 12, 2016 go to post

I'd agreed that cleaning up unused functionality is a good thing. But, full WYSIWYG editor is (was) miles better than "Community WYSIWYG", it should be better to keep most powerful editor mode, not that strange constrained "Community WYSIWYG".

IMVHO

Timur Safin · Feb 12, 2016 go to post

Paul, could you please disable radioactive because it's confusing and useless at the moment? 

Tight now, with so small traffic and counted active members we need full, unfiltered stream of posts sorted by modification/post fate. That's it. No radioactive sorting unless you clearly explained its values to the community (I suspect there are soe, but apparently consensus here that radioactive sorting is evil).

Timur Safin · Feb 9, 2016 go to post

Yes, agreed with Stefan - if you need to keep track of more than a couple of variables in context between function calls then this is indication that you need to create object with multiple properties in its context.

Timur Safin · Feb 8, 2016 go to post

Taking into account that Scott wanted to pass multiple variables between routines, then %-named variables could serve better, making write less code. But...

To prevent variable leak outside of top-most start routine you better to New all %-named variables, e.g.

start

    new %tstVar
    set %tstVar  =  "Green"
    do TestIt()

    quit
 
TestIt() {
    write %tstVar 
}

Internally new statement creates new frame in the variables symbol table (which means virtually it's the new symbol table content), and this %-named entry will be accessible in the inner routines, even if they are of "new procedure block kind" like TestIt function here.

But, importantly, when control flow will return back to the outer start frame and quit statement will be called, it will not only return control to the proper place in caller, but it will also cleanup all new-ed variables, thus effeciantly returning back previous state of symbol table. [I do not mean it will return back variables values, I mean return back presence or absence of some variable name]

P.S.

If you know Perl then it's like local "function" work for localization scope of variables.

Timur Safin · Feb 6, 2016 go to post

Rich, think about it from this prospective: Caché is inherently multiple processes system, if you need concurrency - you invoke new concurrent JOB (or submit order to the worker queue).

But there is shared memory used by whole system - this is called global buffers. If one of the processes will load some block of referenced global to the memory then it's already in shared memory, and another process will find it handily.

So, despite the percepted heavy weight of this advice but using globals as a mean for sharing data is not that bad and is pretty straightforward. Yes, for usual globals there will be extra transactions/journals mechanism involved, and if you really want to avoid them, making globals as much "in-memory" as possible then you could use ^CacheTemp* or ^mtemp globals, which will be mapped to CACHETEMP database, thus not be journalled, e.g. using ^CacheTemp.ApplicationName("pipe") for storing application data will use shared memory, will keep data in memory as long as it's used, and will not be journalled, reducing overhead to the minimum. (But please not forget to use the proper locking discipline, if you will modify this common data from several processes)

P.S.

There is close approximation for this almost in-memory mechanism which is called "process-private variables", which do use CACHETEMP mechanisms for reduced overhead, but which provides extra services with automatic cleanup of used globals once process terminated. 

But the problem is - you could not use PP variables for exchanging data with your children because they are invisible outside of this process. Unfortunately, there is no inheritance mechanism for created process-private storage when children created...

Timur Safin · Jan 27, 2016 go to post

Almost there. With 1 small complain:

- there is unnecessary "Rate This..." banner at the bottom of each exported article.

Could you please modify RSS template to not produce this unnecesary block?

Timur Safin · Jan 26, 2016 go to post

Oh, I see you already mentioned that tag. Never mind

P.S.

That was a good show case of necessity to delete your own comment.

Timur Safin · Jan 26, 2016 go to post

Not exactly nowadays, as I see - %systemInclude is included at %Library.Base level (1 level above the %Library.RegisteredObject).

But idea is the same :)

Timur Safin · Jan 25, 2016 go to post

Let' start from the fact: HabraHabr practice to limit ability to edit comment to post with a couple of weeks, and edit your comment with a couple of minutes is insane. Nobody does it and it's very inconvenient.

It might make sense for high-traffic community as HabrHabr but will not make any sense here:

  • I want to be able to edit my comment while topic is vibile. At any time [though keeping editing history available, as Facebook does is a good practice];
  • And I want to be able to post new comments to any old post without any restriction.

Who knows how life will go and how old idea might become relevant in a couple of years after?

Timur Safin · Jan 24, 2016 go to post

FWIW I see your post already signed as posted by "Thomas Carroll". It looks like it works (whatever you've done so far :)).

Timur Safin · Jan 24, 2016 go to post

And, if this sort of question is of some interest for you, in our (originated from Russian office) projects, which we start to recommend this simple set of code guidelines - https://github.com/intersystems-ru/cos-guidelines

You may entirely ignore them, if they are incompatible with your style (and we still ok to fork your code in that case, if it's still interesting and useful), but at least pay your attention. Eventually. [Or better yet open GitHub issue if you have any complaint or suggestion]