Log in

No account? Create an account
LiveJournal Client Discussions [entries|archive|friends|userinfo]
LiveJournal Client Discussions

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

LJ-Sec 0.1 now released [Jul. 14th, 2006|05:56 pm]
LiveJournal Client Discussions



I have decided to create a solution that allows you to mass-change your security settings. This is a dedicated client, and allows for more complicated security changes than simply switching public posts to friends only. It also acts as a journal archive in the process.

I called the program LJ-Sec.

It is open source (C#), of course. It's designed for Windows systems, and requires the .NET framework (1.1).

You can download the program, and optionally the source, here.

Here are some features:
  • Easily switch post group security levels (eg Public to Friends Only)
  • Perform more complicated custom selections
  • LJ-Sec automatically creates a journal archive, because that's the way the interface works. So you can preview your older posts too.
  • Search your archived journal (boolean search capability). You can tag the results as posts you wish to change.
  • Open source (C#).

    This *is* an initial release, and while I haven't had any problems with post eating etc. in tests, I recommend backing up your journal with Livejournal's backup tool before using this program.

    Hopefully you enjoy the program. :)

    Any suggestions for future improvements will be appreciated. I've already noted that bulk find-and-replace might be a good thing to add to this in the future...
  • linkReply

    [User Picture]From: xb95
    2006-07-14 10:11 pm (UTC)
    Hurrah! You used the syncitems mode! (You also used the flat mode...but whatever!)

    I haven't tried it (on a Mac), but the code looked reasonable. I recommend you do some experimenting with posts containing Unicode/non-ASCII characters. That tends to trip up most people first.
    (Reply) (Thread)
    [User Picture]From: fallen_x_ashes
    2006-07-14 10:53 pm (UTC)
    Hurrah! You used the syncitems mode!

    You know, evreytime I've seen you make a comment, it's always seemed condenscending. :-p Just an observation, I realize the internet sucks out a lot of semantics in language.
    (Reply) (Parent) (Thread) (Expand)
    [User Picture]From: soundwave106
    2006-07-14 11:22 pm (UTC)
    Heh. The reason I used flat mode, primarily, was that XML-RPC (at this time) is not a native function in .Net. I kind of wanted to stick to native .Net framework functions, whenever possible. The only code not using framework functionality is the Internet Explorer component shdocvw.dll, which is used for a lazy preview of a post. :)

    Besides, if one of the senior programmers at work ever found out I was using XML-RPC, he'd launch into his standard anti-XML diatribe, and I don't need to hear that again. :) (He doesn't like the added overhead unless you really need the compatability benefits, in essence.)

    I'll look into making a nice Chinese-character post and see how well the program handles it...
    (Reply) (Parent) (Thread) (Expand)
    [User Picture]From: stipe
    2006-07-20 02:22 am (UTC)
    Yeah... I got an error that seemed to be complaining about encoding when I tried to do the initial synchronization, so I'm wondering if there's an issue with Unicode support.

    I'd give the exact error, but right now it just gives me the "too many sync requests in too short a time" error instead. If I can recreate the original error later I'll post it here.
    (Reply) (Parent) (Thread) (Expand)
    [User Picture]From: vanbeast
    2006-07-14 10:40 pm (UTC)
    Would you consider moving the core functionality into a separate library so that someone could come along with Mono/GTK# and build an interface for non-Windows?
    (Reply) (Thread)
    [User Picture]From: soundwave106
    2006-07-14 11:25 pm (UTC)
    That's a possibility. In fact Mono has some Windows.Forms support so I'm wondering if all I really need to do is make a fork of the code specifically for Mono... at the very least I could convert the core network functions, I bet.
    (Reply) (Parent) (Thread) (Expand)
    [User Picture]From: dk379
    2006-07-15 02:23 pm (UTC)
    I think that using proprietary framework and still calling the program open-source kind of defeats the point... in other words, the message is `sure, my program is free for you to read, but to modify it (fix bugs, add features) you have
    to be a member of elite club of those who purchased proprietary development tools and use proprietary libraries. Even though some of these tools and libraies have open-source equivalent, i have used specific features which ensure everybody has to pay.'

    I hope it is a good program, otherwise... and there is nothing to be ashamed of when using XML-RPC ;-)
    (Reply) (Thread)
    [User Picture]From: soundwave106
    2006-07-15 07:11 pm (UTC)
    Ah, this argument. :)

    This argument is more appropriate for say VB6 -- code there would not compile on anything but VB6.

    Even here, there's some semantics involved -- if you publish the source, it's an open-source program but is not built around the traditional open-source model , where everything from code to compiler is available.

    But, for .Net, the core .NET CLI and C# specifications have been published to ECMA / ISO. So, theoretically, anyone can create a .NET CLI and anyone can create a C# compiler.

    This is what makes the open-source .NET CLI -- Mono -- possible. Microsoft does offer their own free IDE (VS 2005 Express) for C#, but there are also at least three open source IDEs - SharpDevelop, MonoDevelop, and Eclipse -- maybe there's more -- that can be utilized for the .Net framework, or in some cases the Mono framework.

    So, it's not quite *fully* the open-source model yet, but especially considering Mono, it's pretty durn close. The main issue with this app in other environments would be porting it to get rid of Windows-specific GUI stuff, and other OS specific things. And actually that's a fairly common task on almost all platforms, open source of not. :)

    When I get time, I'll probably look at playing with this software on Mono and see what modifications are needed... maybe even compile a Linux version of this using GTK# GUI routines for the heck of it.
    (Reply) (Parent) (Thread)
    [User Picture]From: recompiler
    2006-07-16 06:48 pm (UTC)
    nice job
    (Reply) (Thread)
    [User Picture]From: soundwave106
    2006-07-16 09:43 pm (UTC)
    (Reply) (Parent) (Thread)
    [User Picture]From: way2tired
    2006-08-05 04:06 am (UTC)
    totally blows up for me. Even in debug.
    (Reply) (Thread)
    [User Picture]From: soundwave106
    2006-08-05 07:13 pm (UTC)
    Interesting. Which environment / .NET or Mono package are you trying the prog in?
    (Reply) (Parent) (Thread) (Expand)
    [User Picture]From: sparhawk2k
    2006-08-11 06:29 pm (UTC)
    This looks wonderful! I've been looking for something like this for a long time. Though it would be nice to see a few more versions and bug fixes so I could feel a bit more comfortable doing a lot of mass editing though. There seemed to be a few mentions of Unicode issues at points...
    (Reply) (Thread)
    [User Picture]From: novalis
    2006-10-06 02:54 am (UTC)
    This looks pretty cool. I don't have Windows, so I can't try it myself, but I have a question: does it zap all tags? Because I have been playing around with the 'editevent' method, and it seems to delete all tags associated with the entry (unless, presumably, one finds a way to preserve them, which I haven't yet).

    (Reply) (Thread)
    [User Picture]From: soundwave106
    2006-10-06 03:29 am (UTC)
    Tags (if I remember right) are one of the "meta-data" events available in Livejournal... this along with current music, current mood, and other items like this. In order to read this, you basically have to grab the prop_count value, and read each value in. In the XML-RPC interface, the props structure returned is where you will find this.

    When posting, you basically (in flat file format) create a string that looks like property_name_1=property_value&property_name_2=propertyvalue... etc. XML-RPC, looks like you do something similar within the structure.

    The actual property name isn't documented anywhere, it looks like, but the property name to use is prop_taglist if you want to set it.
    (Reply) (Parent) (Thread) (Expand)