Exemple #1
0
def main():
    twist = Twister(
                    auth_key=auth_key,
                    listener=TwisterListener(
                                handler_class=EventHandler,
                                thread_count=3,
                            ),
                    )
      
    twist.handler.add_event((
        {'name':'callback_one',
        'callback' : cbone,
        'allowuser' : ('User1', 'User2'),
        'hashtag' : ('#you',),
        'priority' : 2,
        },
        {'name':'callback_two',
        'callback' : cbtwo,
        'allowuser' : ('User3',),
        'hashtag' : ('#python','#happy'),
        'priority' : 1,
        },) 
        )
    
    twist.userstream(
                    count=None, 
                    async=False, 
                    secure=True, 
                    daemon=True,) 
Exemple #2
0
 def user_embed(self,username='******',style='normal'):
     if username=='nobody': username='' # to enable /nobody/large
     conf = cherrypy.request.app.config['swizzler']
     twister = Twister(conf['rpc_url'],format_twist)
     result = {
         'title':'@{0} - Swizzler'.format(username),
         'site_root':cherrypy.request.base+cherrypy.request.script_name,
         'user':twister.get_user_info(username)
     }
     result['style_{0}'.format(style)] = True
     return stache.render(stache.load_template('user-iframe'),result)
Exemple #3
0
 def search_embed(self,userprefix=''):
     conf = cherrypy.request.app.config['swizzler']
     twister = Twister(conf['rpc_url'],format_twist)
     result = {'site_root':cherrypy.request.base+cherrypy.request.script_name}
     userprefix = userprefix.strip().split(' ')[0]
     if not userprefix.startswith('@'): userprefix = '@'+userprefix
     if len(userprefix)>1:
         result['user_prefix'] = userprefix
         result['users'] = twister.get_users_by_partial_name(userprefix[1:],conf['num_messages'])
     else:
         result['trending'] = format_trending(twister,3*conf['num_messages']) # no avatar = about 1/3 height :)
     return stache.render(stache.load_template('search'),result)
Exemple #4
0
    def test_twister(self):
        """
		Very basic check to see if the twister works
		"""

        r = random.Random()
        numbers = [r.getrandbits(32) for i in range(624)]
        t = Twister()
        t.backtrack(numbers)

        for i in range(int(1e4)):
            self.assertEqual(t.getrandbits(32), r.getrandbits(32))
Exemple #5
0
def main(args):
    # move to starting position
    rl = RobotLibrary(args.robot, joystick=False)
    rl.move(args.x, args.y, 0.0)
    # configure
    twister = Twister(args.robot, rci=rl._rci)
    twister.dof = 'Rz' # most stable, due to each wheel contributing the same
    twister.speed = args.vRz
    twister.repeats = args.numRepeats
    twister.duration = args.duration
    twister.disableVisionLoc = True # the point of this procedure is to compare vision with encoders
    twister.accelerationLimit = 2.0 # must prevent wheel slip
    # run
    twister.run()
Exemple #6
0
class MotionRangeTwister():
    def __init__(self, args):
        # setup control and state reader
        self.rl = RobotLibrary(args.robot, joystick=False)
        # get ball and move to starting position
        self.homePosition = (args.x, args.y, 0.0)
        self.reset()
        # other settings
        self.dof = args.dof
        self.v = None
        self.accRange = None
        self.setRange() # sensible defaults for v and accRange
        # setup twister, reuse connected RCI
        self.twister = Twister(args.robot, rci=self.rl._rci)
        self.twister.dof = self.dof
        self.twister.duration = 1.0
        self.twister.sleep = 0.5
        self.twister.repeats = args.numRepeats
        self.twister.disableVisionLoc = True

    def setRange(self):
        # default acceleration range and speed setpoint
        self.v = 0.5
        step = 0.2
        if (self.dof == 'Rz'):
            self.v = 2.0
            step = 0.5
        self.accRange = [step * n for n in range(6,20)] # bh_verification
        self.accRange = [step*2 * n for n in range(10,20)] # motion_verification

    def reset(self):
        self.rl.move(*self.homePosition)

    def info(self, msg):
        # write to RDL eventlog
        os.system('frun diagnostics sendEvent INFO "' + msg + '"')
        # write to stdout
        print(msg, end='')
        sys.stdout.flush() # TODO remove, can use print() argument flush=True when migrating to python3

    def run(self):
        # run
        for a in self.accRange:
            self.reset()
            isRz = (self.dof == 'Rz')
            self.info("testing {0} a={1:.2f}{2}2 at v={3:.2f}{2}...".format(self.dof, a, ['m/s', 'rad/s'][isRz], self.v))
            self.twister.speed = self.v
            self.twister.accelerationLimit = a
            self.twister.run()
Exemple #7
0
 def user(self,username='******'):
     if username=='nobody':
         raise cherrypy.HTTPRedirect('/') # promoted posts are nobody's profile
     conf = cherrypy.request.app.config['swizzler']
     twister = Twister(conf['rpc_url'],format_twist)
     user = twister.get_user_info(username)
     messages = twister.get_user_posts(username,conf['num_messages'])
     result = {
         'is_user':True,
         'title':u"{fullname} (@{username}): Profile - Swizzler".format(**user),
         'subject':user,
         'messages':messages,
         'any_messages':not not messages,
         'local_users':twister.local_user_menu()['users'],
         'info':twister.get_info(),
         'site_root':cherrypy.request.base+cherrypy.request.script_name,
     }
     return stache.render(stache.load_template('standard'),result)
Exemple #8
0
 def __init__(self, args):
     # setup control and state reader
     self.rl = RobotLibrary(args.robot, joystick=False)
     # get ball and move to starting position
     self.homePosition = (args.x, args.y, 0.0)
     self.reset()
     # other settings
     self.dof = args.dof
     self.v = None
     self.accRange = None
     self.setRange() # sensible defaults for v and accRange
     # setup twister, reuse connected RCI
     self.twister = Twister(args.robot, rci=self.rl._rci)
     self.twister.dof = self.dof
     self.twister.duration = 1.0
     self.twister.sleep = 0.5
     self.twister.repeats = args.numRepeats
     self.twister.disableVisionLoc = True
Exemple #9
0
 def tag(self,tag=''):
     tag = tag.strip().split(' ')[0]
     if tag.startswith('#'): tag = tag[1:]
     if not tag:
         raise cherrypy.HTTPRedirect('/') # go home to promoted posts
     conf = cherrypy.request.app.config['swizzler']
     twister = Twister(conf['rpc_url'],format_twist)
     messages = twister.get_tag_posts(tag)
     result = {
         'is_tag':True,
         'title':u"#{0} - Swizzler".format(tag),
         'subject':{"fullname":tag},
         'messages':messages,
         'any_messages':not not messages,
         'local_users':twister.local_user_menu()['users'],
         'info':twister.get_info(),
         'site_root':cherrypy.request.base+cherrypy.request.script_name,
     }
     return stache.render(stache.load_template('standard'),result)
Exemple #10
0
def break_twister_time(first_output, max_time=None):
    """
    Given the first output of a MersenneTwister seeded with a timestamp,
    brute-forces and returns the seed.
    """
    max_time = max_time or int(time.time()) + 100
    if isinstance(first_output, int):
        test = lambda seed: Twister(seed).next() == first_output
    else:
        blank = b'\x00' * len(first_output)
        test = lambda seed: twister_encrypt(seed, blank) == first_output
    return next(seed for seed in range(max_time, 0, -1) if test(seed))
Exemple #11
0
def main():
    twist = Twister(auth_key=auth_key, listener=TwisterListener(handler_class=EventHandler, thread_count=3))

    twist.handler.add_event(
        (
            {
                "name": "callback_one",
                "callback": cbone,
                "allowuser": ("User1", "User2"),
                "hashtag": ("#you",),
                "priority": 2,
            },
            {
                "name": "callback_two",
                "callback": cbtwo,
                "allowuser": ("User3",),
                "hashtag": ("#python", "#happy"),
                "priority": 1,
            },
        )
    )

    twist.userstream(count=None, async=False, secure=True, daemon=True)
Exemple #12
0
 def home(self,localusername='******',mode='feed'):
     if localusername=='nobody':
         raise cherrypy.HTTPRedirect('/') # promoted posts are nobody's home
     conf = cherrypy.request.app.config['swizzler']
     twister = Twister(conf['rpc_url'],format_twist)
     menu = twister.local_user_menu(localusername)
     if mode=='mentions':
         messages = twister.get_user_mentions(localusername)
     else:
         messages = twister.get_user_feed(localusername,conf['num_messages'])
     result = {
         'is_home':True,
         'is_mentions':mode=='mentions',
         'is_feed':mode!='mentions',
         'title':u"{fullname} (@{username}): {mode} - Swizzler".format(mode=mode=='mentions' and 'Mentions' or 'Home',**menu['active']),
         'local_users':menu['users'],
         'info':twister.get_info(),
         'subject':menu['active'],
         'messages':messages,
         'any_messages':not not messages,
         'site_root':cherrypy.request.base+cherrypy.request.script_name,
     }
     return stache.render(stache.load_template('standard'),result)
Exemple #13
0
    def index(self):
        conf = cherrypy.request.app.config['swizzler']
        twister = Twister(conf['rpc_url'],format_twist)
        messages = twister.get_promoted_posts(conf['num_messages'])
        result = {
            'is_user':True, # i.e. we want to display "bio" and not mentions/DMs/profile buttons
            'is_promoted':True, # message template needs to know not to show "permalink"
            'title':"Welcome to Swizzler",
            'local_users':twister.local_user_menu('')['users'], # '' means: "Nobody" is active
            'info':twister.get_info(),
            'subject':{ # pseudo-user describing promoted posts
                'fullname':'Promoted posts',
                'bio':format_twist("""
Mining the twister blockchain protects the #twister-verse from attacks like http://twister.net.co/?p=236
but unlike doge, we don't have shiny coins to offer "our protectors".
Instead, they enjoy occasional minutes of fame in the form of the promoted posts you see here.
We #Respect their hard earned crypto-graffiti by appreciating them on coffee/spliff/soy-milk/etc. breaks, because that's how we roll yo.
Start mining today, and this (𝐚𝐧𝐝 moral satisfaction) can be yours.""")
            },
            'messages':messages,
            'any_messages':not not messages,
            'site_root':cherrypy.request.base+cherrypy.request.script_name,
        }
        return stache.render(stache.load_template('standard'),result)
Exemple #14
0
 def twist(self,username,k):
     conf = cherrypy.request.app.config['swizzler']
     twister = Twister(conf['rpc_url'],format_twist)
     twist = twister.get_twist(username,k)
     twist['style_large'] = True
     rts = twister.get_twist_rts(username,k)
     replies = twister.get_twist_replies(username,k)
     result = {
         'is_twist':True,
         'title':u"@{0}: {1} - Swizzler".format(username,twist['time']),
         'twist':twist,
         'in_reply_to':twist.get('reply') and twister.get_twist(twist['reply']['username'],twist['reply']['k']) or None,
         'replies':replies,
         'any_replies':not not replies,
         'rts':rts,
         'any_rts':not not rts,
         'local_users':twister.local_user_menu()['users'],
         'info':twister.get_info(),
         'site_root':cherrypy.request.base+cherrypy.request.script_name,
     }
     return stache.render(stache.load_template('twist'),result)
def generate_output(bits1, bits2, verify):
    """Fill our rule-base with outputs from MT

    :param bits1: number of bits from MT output
    :param bits2: number of bits in MT
    :param ((bitarray, bitarray)) -> None verify: verify function
    :rtype: list[(bitarray, bitarray)]
    """
    twister = Twister(N)
    iterator = iter_bits_8_bit(twister)
    data = []
    for i in xrange(bits1):
        print "Generating output bit %d/%d" % (i, bits1)
        bitfield1 = [0] * bits1
        bitfield2 = [0] * bits2
        val = next(iterator)
        bitfield1[i] = 1
        for j in val:
            bitfield2[j] = 1
        bitfield1 = bitarray(bitfield1)
        bitfield2 = bitarray(bitfield2)
        data.append((bitfield1, bitfield2))
        verify(data[len(data) - 1])
    return data
Exemple #16
0
 def messages(self,localusername,remoteusername=None):
     conf = cherrypy.request.app.config['swizzler']
     twister = Twister(conf['rpc_url'],format_twist)
     localuser = twister.get_user_info(localusername)
     remoteuser = remoteusername and twister.get_user_info(remoteusername) or None
     threads = remoteusername and twister.get_user_messages(localusername,remoteusername,conf['num_messages']) or twister.get_user_messages(localusername)
     result = {
         'is_messages':True,
         'title':u"{0} (@{1}): direct messages{2}".format(
             localuser['fullname'],localuser['username'],
             remoteuser and u" with {fullname} (@{username}) - Swizzler".format(**remoteuser) or ""),
         'subject':localuser,
         'remoteuser':remoteuser,
         'threads':threads,
         'any_threads':not not threads,
         'local_users':twister.local_user_menu()['users'],
         'info':twister.get_info(),
         'site_root':cherrypy.request.base+cherrypy.request.script_name,
     }
     return stache.render(stache.load_template('messages'),result)
Exemple #17
0
def twister_encrypt(seed, data):
    """
    "Encrypts" data with a MersenneTwister generator seeded with the given
    value. Please don't pretend this is cryptography.
    """
    return stream_encrypt(Twister(seed).stream8(), data)