Slashdot Mirror


User: Bellwether

Bellwether's activity in the archive.

Stories
0
Comments
22
First seen
Last seen
Profile
(view on slashdot.org)

Comments · 22

  1. Google Cache goodness on Remotely Counting Machines Behind A NAT Box · · Score: 1

    The presentation is here.

    Since the site is /.'ed, there's a cached copy of the HTML of the paper itself available here.

  2. What about compiler infection? on Win32/Linux Cross-Platform Virus · · Score: 2, Informative
    Ken Thompson gave a pretty famous speech called "Reflections about Trusting Trust" that explained how one could use compilers to spread infection to new applications. It was a pretty radical idea at the time.

    It's a little different from standard virus infection, but the techique could be easily modified. Here's a short description of the technique, and here's the full text of the speech (with slides).

  3. Re:Security through obscurity. on Optical Cryptography · · Score: 2, Insightful

    Well, look at it this way: if your background traffic is random noise, and your "signal" cannot be differentiated from random noise, one must question what kind of signal actually is present.

    It's really, really hard to mask a legitimate messages in random noise and hope that the bad guy won't be able to differentiate the two.

  4. Re:Nope: You've just given the bad guy your key. on Optical Cryptography · · Score: 2, Insightful

    This is called traffic masking, and is a useful, known tool. However, it can also be viewed as security through obscurity, typically a bad thing. (tm)

  5. Re:Just Taking Up Space? on Automated Chess Battling · · Score: 1

    Actually, I think this is not at all true. Wired's quality has degraded so much in the last few years, it's almost pointless to spend any time there. On the other hand, while not all articles on /. are amazingly good, the vast majority are interesting and keep my attention.

    If however, there's something on Wired (or any other news site) that's interesting, why not discuss it here? /. offers a unique forum and audience for discussion of topics that interest us all.

  6. Re:Finite amount of moves... on Automated Chess Battling · · Score: 1

    The problem is that the number of possible chess positions is on the order of 10^40 -- the branching factor for a decision tree is around 36, I believe. This means that for anything but the most trivial games, storing the full decision tree in memory is not possible with today's technology. Even if you put the problem in a vastly distributed network -- that 10^40 is really big.

    This is why typical algorithms used in chess include limited frontier search -- you want to reduce the number of states you consider by use of a heuristic function. This function is informed by the pieces involved in the game, the positions of those pieces, etc.

  7. Re:Course Choices on Computer Science vs. Computer Engineering? · · Score: 2


    *Please*, don't go to a school that thinks a CS degree means you can program, in any language, whetehr it's VB,C,C++,Java, etc. Computer Science is not about programming -- as has been reiterated above. It's about understanding the core principles and paradigms of algorithms, theory of computation, operating systems, and language. It's about networks and about compilers, not about code. Computer Scientists are linguists, operations researchers, mathetmaticians, and prophets. They are not primarily coders. Don't confuse computer science with computer programming!

  8. Re:Hum... on Dreamcast (Finally) Goes Broadband · · Score: 1

    Well, the internal IP stack won't change unless it was embedded in the modem (which I kind of doubt.) However, perhaps ethernet is better supported by the underlying WinCE?

    On your #2 though, if you're not doing NAT, your dreamcast would be a targetable host though. Sure, it would be going through your [cable/dsl] modem, but that's just effectively a router.

  9. Re:sega network? on Dreamcast (Finally) Goes Broadband · · Score: 1

    Typical ADSL installations that use PPP utilize PPPoe (PPP over Ethernet) which is listed as being supported. They also say that they *do* support DHCP. Now, all I need is for them to make this baby wireless, and I can connect it up to the rest of my 802.11 network! =)

  10. Not quite right.... on Beware Of 2.4 GHz Interference · · Score: 1

    This isn't quite accurate. There are two flavors of 802.11 -- Frequency Hopping and Direct Sequence. I believe the author specified 802.11b which is the Direct Sequence flavor used by Lucent's WaveLAN and the Airport. (I may be wrong about which letter is which.) Frequency hopping equipment will indeed cause interference with the direct sequence equipment, since it's hopping through the ranges used for direct sequence pretty frequently. In the lab we've seen about 30% packet loss on WaveLAN when streaming full speed over 802.11a using the Raytheon 802.11 chipset used in WebGear Aviators. The Aviators seem to be pretty resilient though, and aren't affected significantly the other way.

  11. Robustness. on Yahoo Putting Movies Online · · Score: 2

    Try dropping the middle of an MPEG frame on the wire... try running a network level adaptation on the protocol. You can't, not without serious horsepower in the middle. If you'd like to be able to handle network congestion control and adaptation at the router level, MPEG is less than optimal.

  12. Re:Multicast baby! on Yahoo Putting Movies Online · · Score: 1

    This is a good solution -- as any networks student can tell you. But, with the goal of any movie, anywhere, anytime, multicast isn't necessarily the right answer. Say I want to see Episode 23 of X-Files at 2:13 am -- there may be someone else who wants a similiar offering, but I'll wager that there will be fairly few. Now -- maybe a combination of unicast and multicast would be interesting. But then you also need to talk about network congestion, and security, etc.... Not to mention codecs. Will mpeg-2 be the future of streaming video? Probably not -- Microsoft ASF? Wavelet based encoding? It's a very interesting research area.

  13. multi threading? on Linux After Y2K · · Score: 1

    I guess this forces us to ask if the beads be multi-threaded?

    *duck*

  14. Re:Linux - possible? yes. Practical? not so sure. on Palm Pilot with Hard Drive · · Score: 1

    if by "buying hardware" and "doing weird stuff" you mean you have to have a TRG SuperPilot board and a custom bootloader, then sure... it'd be nice to have a Pilot with memory flashable by the user. I agree wholeheartedly. uCLinux makes a nice jumping off point for small embedded systems.

  15. Re:Interesting Palm-clone -- Linux on the Palm on Palm Pilot with Hard Drive · · Score: 2

    Linux on the PalmPilot's been done. Check out http://www.uclinux.org. That's Kenneth Albanowski and Jeff Dionne's group. They've got some cool stuff, in addition to the PalmPilot work, they've got a version of linux that runs on a processor and chipset the size of a SIMM stick. Check it out!

  16. Re:spelling. on Another Wierd Linux Box · · Score: 1

    Not to flame, but isn't it w-i-e-r-d? You know, "i before e" and all that.

  17. Clarification on E-Trade backs down, lets Red Hat IPO folks in · · Score: 1

    There is a separate Indication of Interest part of the website for letter holders, that has already opened. The general Indication of Interest has *not* yet opened. So if you received a letter, you can access the password/email address protected part of the IPO site.

  18. Re:I don't get it. on Barred from Red Hat IPO? · · Score: 1

    Actually, E*trade does check (purportedly) against the invitee list. When I submitted my interest, it asked me for the email account address that the invitation was sent to, and said that fraudulent attempts to sign up would be blacklisted. This does make it sound more like an invitation than a public announcement.

  19. DVD who cares? on Ask Slashdot: Movie Players for Linux? · · Score: 1

    Right -- cuz there's no way I want a 16 GB removable media on my computer! Sheeit. I'm more than happy with 750Mb CDs -- oh, and yeah, why bother watching DVD's on my 1600x1200 monitor when I can get 320 whole scan lines on my low res tv. (Or alternatively, I can spend several thou and get an HDTV...hmmm let me think....)

    =)

  20. Shuffle? on X11Amp v0.9 Source Released · · Score: 1

    /*
    I noticed shuffle isn't hooked in yet. Here's a quick fix to enable shuffle. It's not an ideal fix, but it'll work until we see another release!
    My apologies if the formatting gets screwed up.
    */

    //playlist.c
    #include "x11amp.h"

    GList *playlist=NULL;
    GList *playlist_position;


    void playlist_clear(void)
    {
    GList *node;
    PlaylistEntry *entry;

    if(playlist)
    {
    if(get_input_playing()) input_stop();
    node=playlist;
    while(node)
    {
    entry=(PlaylistEntry *)node->data;
    if(entry->filename) g_free(entry->filename);
    if(entry->title) g_free(entry->title);
    node=node->next;
    }
    g_list_free(playlist);
    playlist=NULL;
    playlist_position=NULL;
    }
    }

    void playlist_delete(gboolean crop)
    {
    gboolean restart_playing=FALSE,set_info_text=FALSE;
    GList *node=playlist,*next;
    PlaylistEntry *entry;

    while(node)
    {
    entry=(PlaylistEntry *)node->data;
    next=g_list_next(node);
    if((entry->selected&&!crop)||(!entry->selected&&cr op))
    {
    if(playlist_position==node)
    {
    set_info_text=TRUE;
    if(get_input_playing())
    {
    input_stop();
    restart_playing=TRUE;
    }
    if(g_list_next(playlist_position))
    playlist_position=g_list_next(playlist_position);
    else if(g_list_previous(playlist_position))
    playlist_position=g_list_previous(playlist_positio n);
    else if(node!=playlist)
    playlist_position=playlist;
    else
    playlist_position=NULL;
    }
    if(entry->filename)
    g_free(entry->filename);
    if(entry->title)
    g_free(entry->title);
    playlist=g_list_remove_link(playlist,node);
    g_free(entry);
    g_list_free_1(node);
    }
    node=next;
    }
    playlistwin_update_list();
    if(set_info_text)
    mainwin_set_info_text();
    if(restart_playing)
    {
    if(playlist_position)
    playlist_play();
    mainwin_set_song_info(0,0,0);
    }
    }

    void playlist_select_all(void)
    {
    GList *node;

    node=playlist;
    while(node)
    {
    ((PlaylistEntry *)node->data)->selected=TRUE;
    node=node->next;
    }
    playlistwin_update_list();
    }

    void playlist_select_none(void)
    {
    GList *node;

    node=playlist;
    while(node)
    {
    ((PlaylistEntry *)node->data)->selected=FALSE;
    node=node->next;
    }
    playlistwin_update_list();
    }

    void playlist_inverse_selection(void)
    {
    GList *node;

    node=playlist;
    while(node)
    {
    ((PlaylistEntry *)node->data)->selected=!((PlaylistEntry *)node->data)->selected;
    node=node->next;
    }
    playlistwin_update_list();
    }


    void playlist_add(gchar *filename)
    {
    PlaylistEntry *entry;
    gchar *ext;

    entry=g_malloc0(sizeof(PlaylistEntry));
    entry->length=-1;
    entry->filename=g_strdup(filename);

    if(!playlist)
    {
    playlist=g_list_append(NULL,entry);
    playlist_position=playlist;
    }
    else
    g_list_append(playlist,entry);
    }

    void playlist_add_dir(gchar *path)
    {
    DIR *dir;
    struct dirent *dirent;
    struct stat statbuf;
    gchar *filename;

    if(dir=opendir(path))
    {
    while(dirent=readdir(dir))
    {
    if(dirent->d_name[0]!='.')
    {
    filename=g_strconcat(path,"/",dirent->d_name,NULL) ;
    stat(filename,&statbuf);
    if(S_ISDIR(statbuf.st_mode))
    playlist_add_dir(filename);
    else
    playlist_add(filename);
    g_free(filename);
    }
    }
    }
    }

    /*
    * I'm not sure if this is the correct way to do it but it seems to work fine
    */

    void playlist_add_url_string(gchar *string)
    {
    gint i=0,start;
    gchar *temp,*ext;
    struct stat statbuf;

    printf("%s\n",string);
    while(*string)
    {
    temp=strchr(string,'\n');
    if(temp)
    {
    if(*(temp-1)=='\r')
    *(temp-1)='\0';
    *temp='\0';
    }
    if(!strncasecmp(string,"file:",5))
    {
    stat(string+5,&statbuf);
    if(S_ISDIR(statbuf.st_mode))
    playlist_add_dir(string+5);
    else
    {
    ext=strrchr(string+5,'.');
    if(ext)
    {
    if(!strcasecmp(ext,".m3u")||!strcasecmp(ext,".pls" ))
    playlist_load(string+5);
    else
    playlist_add(string+5);
    }
    else
    playlist_add(string+5);
    }
    }
    else
    playlist_add(string);
    if(!temp)
    break;
    string=temp+1;

    }

    }

    void playlist_play(void)
    {
    PlaylistEntry *entry;
    gchar *ptr;

    if(get_playlist_length()==0)
    return;
    entry=(PlaylistEntry *)playlist_position->data;

    if(get_input_playing()) input_stop();

    input_play(entry->filename);

    if(input_get_time()!=-1)
    input_set_eq(cfg.equalizer_active,cfg.equalizer_pr eamp,cfg.equalizer_bands);

    }

    void playlist_set_info(gchar *title,gint length,gint rate,gint freq,gint nch)
    {

    PlaylistEntry *entry;

    entry=(PlaylistEntry *)playlist_position->data;

    if(entry->title)
    g_free(entry->title);
    entry->title=g_strdup(title);
    entry->length=length;
    mainwin_set_song_info(rate,freq,nch);
    mainwin_set_info_text();
    playlistwin_update_list();
    }


    void playlist_next(void)
    {
    if(!playlist) return;

    if(!cfg.shuffle) {
    if(g_list_next(playlist_position))
    playlist_position=g_list_next(playlist_position);
    }
    else
    playlist_position=g_list_nth(playlist,rand() % get_playlist_length());
    if(get_input_playing())
    {
    input_stop();
    playlist_play();
    }
    else
    {
    mainwin_set_info_text();
    playlistwin_update_list();
    }

    }

    void playlist_prev(void)
    {
    if(!playlist) return;


    if(g_list_previous(playlist_position))
    playlist_position=g_list_previous(playlist_positio n);
    if(get_input_playing())
    {
    input_stop();
    playlist_play();
    }
    else
    {
    mainwin_set_info_text();
    playlistwin_update_list();
    }
    }

    void playlist_set_position(gint pos)
    {
    if(!playlist) return;

    playlist_position=g_list_nth(playlist,pos);
    if(get_input_playing())
    {
    input_stop();
    playlist_play();
    }
    else
    {
    mainwin_set_info_text();
    playlistwin_update_list();
    }
    }

    void playlist_eof_reached(void)
    {
    input_stop();

    if(!cfg.shuffle) {

    if(!g_list_next(playlist_position))
    {
    playlist_position=playlist;
    if(!cfg.repeat)
    {
    mainwin_set_song_info(0,0,0);
    mainwin_set_info_text();
    return;
    }
    }

    else
    playlist_position=g_list_next(playlist_position);
    }
    else
    playlist_position=g_list_nth(playlist,rand() % get_playlist_length());


    playlist_play();
    }

    gint get_playlist_length(void)
    {
    if(!playlist)
    return 0;
    return g_list_length(playlist);
    }

    gchar *playlist_get_info_text(void)
    {
    PlaylistEntry *entry;
    gchar *text=NULL,*title,*tmp,*tmp2;
    gint i;

    if(playlist)
    {
    entry=(PlaylistEntry *)playlist_position->data;
    if(entry->title)
    title=entry->title;
    else
    {
    title=strrchr(entry->filename,'/');
    if(!title)
    title=entry->filename;
    else
    title++;
    }
    text=g_malloc(strlen(title)+20);
    if(entry->length!=-1)
    sprintf(text,"%d. %s (%d:%-2.2d)",get_playlist_position()+1,title,entry ->length/60000,(entry->length/1000)%60);
    else
    sprintf(text,"%d. %s",get_playlist_position()+1,title);
    if(cfg.convert_underscore)
    while(tmp=strchr(text,'_'))
    *tmp=' ';
    if(cfg.convert_twenty)
    while(tmp=strstr(text,"%20"))
    {
    tmp2=tmp+3;
    *(tmp++)=' ';
    while(*tmp2)
    *(tmp++)=*(tmp2++);
    *tmp='\0';
    }



    }
    return text;
    }

    int playlist_get_current_length(void)
    {
    PlaylistEntry *entry;

    if(!playlist) return 0;

    entry=(PlaylistEntry *)playlist_position->data;
    return entry->length;
    }

    gboolean playlist_save(gchar *filename)
    {
    PlaylistEntry *entry;
    GList *node;
    FILE *file;
    gchar *ext;
    gboolean is_pls=FALSE;

    if(file=fopen(filename,"w"))
    {
    ext=strrchr(filename,'.');
    if(ext)
    if(!strcasecmp(ext,".pls"))
    {
    is_pls=TRUE;
    fprintf(file,"[playlist]\n");
    fprintf(file,"NumberOfEntries=%d\n",get_playlist_l ength());
    }
    node=playlist;
    while(node)
    {
    entry=(PlaylistEntry *)node->data;
    if(is_pls)
    fprintf(file,"File%d=%s\n",g_list_position(playlis t,node)+1,entry->filename);
    else
    fprintf(file,"%s\n",entry->filename);
    node=node->next;
    }
    fclose(file);
    return TRUE;
    }
    return FALSE;
    }

    gboolean playlist_load(gchar *filename)
    {
    FILE *file;
    gchar *line,*ext,key[10];
    gint i,noe;
    int linelen=1024;

    ext=strrchr(filename,'.');
    if(!ext) ext=".m3u";
    if(!strcasecmp(ext,".pls"))
    {
    if(line=read_ini_string(filename,"playlist","Numbe rOfEntries"))
    {
    noe=atoi(line);
    g_free(line);
    }
    else
    return FALSE;
    for(i=1;i=noe;i++)
    {
    g_snprintf(key,10,"File%d",i);
    if(line=read_ini_string(filename,"playlist",key))
    {
    playlist_add(line);
    g_free(line);
    }
    }
    return TRUE;
    }
    else
    {
    if(file=fopen(filename,"r"))
    {
    line=g_malloc(linelen);
    while(fgets(line,linelen,file))
    {
    while(strlen(line)==linelen-1&&line[strlen(line)-1 ]=='\n')
    {
    linelen+=1024;
    line=(gchar *)g_realloc(line,linelen);
    fgets(&line[strlen(line)],1024,file);
    }
    while(line[strlen(line)-1]=='\r'||line[strlen(line )-1]=='\n') line[strlen(line)-1]='\0';
    playlist_add(line);
    }
    fclose(file);
    return TRUE;
    }
    }
    return FALSE;
    }

    GList *get_playlist(void)
    {
    return playlist;
    }

    gint get_playlist_position(void)
    {
    return g_list_position(playlist,playlist_position);
    }

    gint playlist_sort_by_title_cmpfunc(PlaylistEntry *a,PlaylistEntry *b)
    {
    gchar *a_title=NULL,*b_title=NULL;
    if(a->title)
    a_title=a->title;
    else
    {
    if(a->filename[0]='/')
    a_title=strrchr(a->filename,'/')+1;
    if(!a_title)
    a_title=a->filename;
    }

    if(b->title)
    b_title=b->title;
    else
    {
    if(b->filename[0]='/')
    b_title=strrchr(b->filename,'/')+1;
    if(!b_title)
    b_title=b->filename;


    }
    return strcasecmp(a_title,b_title);
    }


    void playlist_sort_by_title(void)
    {
    playlist=g_list_sort(playlist,(GCompareFunc)playli st_sort_by_title_cmpfunc);
    }

    gint playlist_sort_by_filename_cmpfunc(PlaylistEntry *a,PlaylistEntry *b)
    {
    gchar *a_filename=NULL,*b_filename=NULL;
    if(a->filename[0]='/')
    a_filename=strrchr(a->filename,'/')+1;
    if(!a_filename)
    a_filename=a->filename;

    if(b->filename[0]='/')
    b_filename=strrchr(b->filename,'/')+1;
    if(!b_filename)
    b_filename=b->filename;

    return strcasecmp(a_filename,b_filename);
    }


    void playlist_sort_by_filename(void)
    {
    playlist=g_list_sort(playlist,(GCompareFunc)playli st_sort_by_filename_cmpfunc);
    }

    gint playlist_sort_by_path_cmpfunc(PlaylistEntry *a,PlaylistEntry *b)
    {
    return strcasecmp(a->filename,b->filename);
    }


    void playlist_sort_by_path(void)
    {
    playlist=g_list_sort(playlist,(GCompareFunc)playli st_sort_by_path_cmpfunc);
    }

    void playlist_reverse(void)
    {
    playlist=g_list_reverse(playlist);
    }

  21. Hold on. ACM sucks dick. on Classic Computer Science Papers · · Score: 1

    Wait a sec...The ACM is a professional organization. They offer really great services, including reduced fees to conferences, SIG memberships, etc. The prices they charge are very reasonable for the services they offer. I'm a member of SIGOPS, and SIGLINK, and SIGART -- I receive valuable publications, as well as being allowed to access their full text archives. Just because they charge a reasonable fee to allow access to their archives, they don't "suck dick."

    Should a professional organization like the ACM provide free access to their archives? Why?

  22. Point of copyright extension on US Extending Copyrights · · Score: 1

    If you read the actual commentary in the congressional record, the point of the copyright extension was to make our copyright protection laws consistent with European laws.

    Will targeting the U.S. alone actually make a difference? Otherwise, Open Source Book projects still won't be able to legally export their texts outside the U.S.