Merged in ^/personal/rjs/6.21.1.dev0@11257
- Legacy-Id: 11259
This commit is contained in:
parent
caf3a4cb7e
commit
14a4ea177c
ietf
121
ietf/bin/2016-05-25-collect-photos.py
Normal file
121
ietf/bin/2016-05-25-collect-photos.py
Normal file
|
@ -0,0 +1,121 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os, sys, shutil, pathlib
|
||||
|
||||
# boilerplate
|
||||
basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../web/"))
|
||||
sys.path = [ basedir ] + sys.path
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ietf.settings")
|
||||
|
||||
import django
|
||||
django.setup()
|
||||
|
||||
from ietf.group.models import Role
|
||||
|
||||
old_images_dir = os.path.join(django.conf.settings.OLD_PHOTOS_DIR,'wg/images/')
|
||||
new_images_dir = os.path.join(django.conf.settings.PHOTOS_DIR,django.conf.settings.PHOTO_URL_PREFIX)
|
||||
|
||||
old_image_files = []
|
||||
for (dirpath, dirnames, filenames) in os.walk(old_images_dir):
|
||||
old_image_files.extend(filenames)
|
||||
break # Only interested in the files in the top directory
|
||||
|
||||
old_image_files_lc = map(lambda x:x.lower(),old_image_files)
|
||||
|
||||
interesting_persons = set()
|
||||
|
||||
interesting_persons.update([r.person for r in Role.objects.filter(group__type='wg',group__state='active',name='chair')])
|
||||
interesting_persons.update([r.person for r in Role.objects.filter(group__type='rg',group__state='active',name='chair')])
|
||||
interesting_persons.update([r.person for r in Role.objects.filter(group__type='area',group__state='active',name_id='ad')])
|
||||
interesting_persons.update([r.person for r in Role.objects.filter(group__acronym='iab',name_id='member')])
|
||||
interesting_persons.update([r.person for r in Role.objects.filter(group__acronym='irtf',name_id='chair')])
|
||||
|
||||
#from ietf.person.models import Person
|
||||
#interesting_persons = Person.objects.filter(name__contains="Burman")
|
||||
|
||||
exceptions = {
|
||||
'Aboba' : 'aboba-bernard',
|
||||
'Bernardos' : 'cano-carlos',
|
||||
'Bormann' : 'bormann-carsten',
|
||||
'Wesley George' : 'george-wes',
|
||||
'Hinden' : 'hinden-bob',
|
||||
'Hutton' : 'hutton-andy',
|
||||
'Narten' : 'narten-thomas', # but there's no picture of him
|
||||
'O\'Donoghue' : 'odonoghue-karen',
|
||||
'Przygienda' : 'przygienda-antoni',
|
||||
'Salowey' : 'salowey-joe',
|
||||
'Patricia Thaler' : 'thaler-pat',
|
||||
'Gunter Van de Velde' : 'vandevelde-gunter',
|
||||
'Eric Vyncke' : 'vynke-eric',
|
||||
'Zuniga' : 'zuniga-carlos-juan',
|
||||
'Zhen Cao' : 'zhen-cao',
|
||||
|
||||
}
|
||||
|
||||
# Manually copied Bo Burman and Thubert Pascal from wg/photos/
|
||||
# Manually copied Victor Pascual (main image, not thumb) from wg/
|
||||
# Manually copied Eric Vync?ke (main image, not thumb) from wg/photos/
|
||||
# Manually copied Danial King (main image, not thumb) from wg/photos/
|
||||
# Manually copied the thumb (not labelled as such) for Tianran Zhou as both the main and thumb image from wg/photos/
|
||||
|
||||
|
||||
processed_files = []
|
||||
|
||||
for person in sorted(list(interesting_persons),key=lambda x:x.last_name()+x.ascii):
|
||||
substr_pattern = None
|
||||
for exception in exceptions:
|
||||
if exception in person.ascii:
|
||||
substr_pattern = exceptions[exception]
|
||||
break
|
||||
if not substr_pattern:
|
||||
name_parts = person.ascii.lower().split()
|
||||
substr_pattern = '-'.join(name_parts[-1:]+name_parts[0:1])
|
||||
|
||||
candidates = [x for x in old_image_files_lc if x.startswith(substr_pattern)]
|
||||
|
||||
# Fixup for other exceptional cases
|
||||
if person.ascii=="Lee Howard":
|
||||
candidates = candidates[:2] # strip howard-lee1.jpg
|
||||
|
||||
if person.ascii=="David Oran":
|
||||
candidates = ['oran-dave-th.jpg','oran-david.jpg']
|
||||
|
||||
if person.ascii=="Susan Hares":
|
||||
candidates = ['hares-sue-th.jpg','hares-susan.jpg']
|
||||
|
||||
if person.ascii=="Mahesh Jethanandani":
|
||||
candidates = ['mahesh-jethanandani-th.jpg','jethanandani-mahesh.jpg']
|
||||
|
||||
if len(candidates) not in [0,2]:
|
||||
candidates = [x for x in candidates if not '00' in x]
|
||||
|
||||
# At this point we either have no candidates or two. If two, the first will be the thumb
|
||||
|
||||
def original_case(name):
|
||||
return old_image_files[old_image_files_lc.index(name)]
|
||||
|
||||
def copy(old, new):
|
||||
global processed_files
|
||||
print("Copying", old, "to", new)
|
||||
shutil.copy(old, new)
|
||||
processed_files.append(old)
|
||||
|
||||
if len(candidates)==2:
|
||||
old_name = original_case(candidates[1])
|
||||
old_thumb_name = original_case(candidates[0])
|
||||
old_name_ext = os.path.splitext(old_name)[1]
|
||||
old_thumb_name_ext = os.path.splitext(old_thumb_name)[1]
|
||||
|
||||
new_name = person.photo_name(thumb=False)+old_name_ext.lower()
|
||||
new_thumb_name = person.photo_name(thumb=True)+old_thumb_name_ext.lower()
|
||||
|
||||
copy( os.path.join(old_images_dir,old_name), os.path.join(new_images_dir,new_name) )
|
||||
|
||||
#
|
||||
copy( os.path.join(old_images_dir,old_thumb_name), os.path.join(new_images_dir,new_thumb_name) )
|
||||
|
||||
|
||||
for file in pathlib.Path(old_images_dir).iterdir():
|
||||
if file.is_file():
|
||||
if not str(file) in processed_files:
|
||||
print("Not processed:", file.name)
|
|
@ -19,5 +19,6 @@ urlpatterns = patterns('',
|
|||
(r'^bofs/$', views.bofs),
|
||||
(r'^email-aliases/$', 'ietf.group.views.email_aliases'),
|
||||
(r'^bofs/create/$', views_edit.edit, {'action': "create"}, "bof_create"),
|
||||
(r'^chair-photos/$', views.chair_photos),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/', include('ietf.group.urls_info_details')),
|
||||
)
|
||||
|
|
|
@ -870,3 +870,12 @@ def derived_archives(request, acronym=None, group_type=None):
|
|||
'group':group,
|
||||
'list_acronym':list_acronym,
|
||||
}))
|
||||
|
||||
def chair_photos(request, group_type=None):
|
||||
if not group_type=='wg':
|
||||
raise Http404
|
||||
chair_roles = sorted(Role.objects.filter(group__type='wg',group__state='active',name_id='chair'),key=lambda x: x.person.last_name()+x.person.name+x.group.acronym)
|
||||
for role in chair_roles:
|
||||
role.last_initial = role.person.last_name()[0]
|
||||
return render(request, 'group/chair_photos.html', {'chair_roles':chair_roles})
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ import os
|
|||
from django.db import models
|
||||
from django.db.models.signals import post_delete
|
||||
from django.conf import settings
|
||||
from django.core.files.storage import FileSystemStorage
|
||||
from django.contrib.auth.models import User
|
||||
from django.template.loader import render_to_string
|
||||
from django.template.defaultfilters import linebreaks
|
||||
|
@ -22,6 +21,8 @@ from ietf.nomcom.utils import (initialize_templates_for_group,
|
|||
initialize_requirements_for_position,
|
||||
delete_nomcom_templates)
|
||||
|
||||
from ietf.utils.storage import NoLocationMigrationFileSystemStorage
|
||||
|
||||
|
||||
def upload_path_handler(instance, filename):
|
||||
return os.path.join(instance.group.acronym, 'public.cert')
|
||||
|
@ -32,14 +33,6 @@ class ReminderDates(models.Model):
|
|||
nomcom = models.ForeignKey('NomCom')
|
||||
|
||||
|
||||
class NoLocationMigrationFileSystemStorage(FileSystemStorage):
|
||||
|
||||
def deconstruct(obj):
|
||||
path, args, kwargs = FileSystemStorage.deconstruct(obj)
|
||||
kwargs["location"] = None
|
||||
return (path, args, kwargs)
|
||||
|
||||
|
||||
class NomCom(models.Model):
|
||||
public_key = models.FileField(storage=NoLocationMigrationFileSystemStorage(location=settings.NOMCOM_PUBLIC_KEYS_DIR),
|
||||
upload_to=upload_path_handler, blank=True, null=True)
|
||||
|
|
26
ietf/person/migrations/0008_add_biography_field.py
Normal file
26
ietf/person/migrations/0008_add_biography_field.py
Normal file
|
@ -0,0 +1,26 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('person', '0007_auto_20160520_0304'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='person',
|
||||
name='biography',
|
||||
field=models.TextField(help_text=b'Short biography for use on leadership pages.', blank=True),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='personhistory',
|
||||
name='biography',
|
||||
field=models.TextField(help_text=b'Short biography for use on leadership pages.', blank=True),
|
||||
preserve_default=True,
|
||||
),
|
||||
]
|
82
ietf/person/migrations/0009_populate_biography.py
Normal file
82
ietf/person/migrations/0009_populate_biography.py
Normal file
|
@ -0,0 +1,82 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
bios = {
|
||||
|
||||
'Jari Arkko' : 'Jari Arkko is an Expert on Internet Architecture with Ericsson Research in Jorvas, Finland. At the IETF, he has served six years as one of the Internet Area Directors in the Internet Engineering Steering Group (IESG). He has published 32 RFCs, including specifications for Mobile IPv6, EAP-AKA, Diameter, SEND, and various IPv6 related documents. He has previously served as a chair of three IETF working groups, and has created and terminated over a dozen of working groups at the IETF in his Area Director role. Jari also serves as a chair of the Technical Advisory Board for the IP Smart Objects Alliance (IPSO) and works in a number of research projects at Ericsson. In the past, Jari has worked in the implementation of routers, VPN software, testing tools, modem banks, cellular network nodes, AAA systems, compilers, and AI systems. He received his Licentiate\'s degree from Helsinki University of Technology in 1996. Jari\'s main interests in the Internet include architecture, IPv6, small implementations, the Internet of Things, social media, Internet governance, and cutting through hype that often surrounds some aspects of our technology. He likes to build and and use the technology that he works with. For instance, he moved to an IPv6-only network in 2010 and builds smart home networks as a hobby. He frequently communicates with his laundry on Facebook.',
|
||||
|
||||
'Ralph Droms' : 'Dr. Ralph Droms is a Cisco Distinguished Engineer in the office of the Enterprise Networking CTO. At Cisco, he heads up a research project in the application of ICN to sensor and actuator networks. Dr. Droms is also working on highly scalable DNS service discovery. Dr. Droms organized the IETF working group that designed DHCP in 1989 and has been active in the IETF in several roles ever since. He is an author of more than 20 RFCs, including many of the core DHCP specifications. Dr. Droms chaired the dhc WG until 2009, when he was selected to be an Internet Area Director in the IESG. In addition to serving on the IAB, Dr. Droms is currently co-chair of the dnssd WG and technical advisor to the 6lo WG. Dr. Droms was also an editor for the IPv6 requirements in the CableLabs DOCSIS 3.0 specification and contributed to the ZigBee Alliance ZigBee-IP specification. Prior to joining Cisco in 2000, Dr. Droms was a member of the computer science department faculty at Bucknell University and co-director of the Computer Center at Bucknell. He has also been a member of the computer science faculty at Pennsylvania State University, and was on the research staff at both IBM and Burroughs (Unisys). Dr. Droms is a co-author of "The DHCP Handbook". His PhD is in computer science from Purdue University.',
|
||||
|
||||
'Ted Hardie' : 'Ted Hardie currently works for Google, putting networks, protocols, and people together in new and optimal ways. Ted first worked in the Internet field in 1988 when he joined the operations staff of the SRI NIC. He later became the technical lead for the NASA NIC, part of the NASA Science Internet project. After leaving NASA, he joined Equinix as its initial Director of Engineering before taking on the role of Director of Research and Development. He was an early-stage executive at Nominum before joining Qualcomm R & D. While he was Qualcomm\'s Director of Internet and Wireless, he served the Internet community as a member of the Internet Architecture Board and as an Applications Area Director for the IETF. He served as Trustee of the Internet Society from 2007 to 2010, and as its Treasurer in 2008 to 2010, while Managing Director of Panasonic\'s Silicon Valley Wireless Research Lab. Dr. Hardie received his bachelor\'s degree from Yale and his doctorate from Stanford. He has been a Fulbright Fellow and a Yale-China Fellow, both in Hong Kong.',
|
||||
|
||||
'Joe Hildebrand' : 'Joe Hildebrand is a Cisco Distinguished Engineer in the Corporate Strategic Innovation Group, which builds corporate-scale technology strategies for Cisco. Previously, he ran architecture for WebEx, was the CTO at Jabber Inc., was the Chief Architect at a custom software development company, built battlefield messaging systems, and engineered robots and their control systems for safety-critical applications. Joe has co-chaired several IETF working groups (including XMPP, HyBi, and webpush), serves on the RFC Series Oversight Committee (RSOC), and has a deep interest in protocols designed for use by typical application developers. He received a B.S. in Mechanical Engineering from Virginia Tech in 1992.',
|
||||
|
||||
'Russ Housley' : 'Russ Housley has worked in the computer and network security field since 1982, and he founded Vigil Security, LLC in September 2002. Russ began serving as the IETF Chair in March 2007. His security research and standards interests include security protocols, certificate management, cryptographic key distribution, and high assurance design and development practices. Prior to accepting the IETF Chair position, Russ served as the Security Area Director, and prior to that he chaired the Secure MIME (S/MIME) Working Group. Russ was editor for several cornerstone Internet PKI standards (including RFC 3280). In November 2004, Russ was recognized by the IEEE 802.11 working group for his contributions to IEEE 802.11i-2004, which fixes the severe security shortcoming of the Wired Equivalent Privacy (WEP). Russ received his B.S. in computer science from Virginia Tech in 1982, and he received his M.S. in computer science from George Mason University in 1992.',
|
||||
|
||||
'Lee Howard' : 'Lee Howard is the Director of Network Technology for Time Warner Cable, where he leads efforts in evolving technologies, and the company\'s deployment of IPv6. His team includes network measurement, tools, and security. In addition to his IETF work, he has contributed to or presented at CableLabs, SCTE, NANOG, and every RIR. Previous work has included experience at enterprise networks, application hosting, and large and small ISPs. He has served on the ARIN Board of Trustees and the NRO NC.',
|
||||
|
||||
'Erik Nordmark' : 'Erik Nordmark works on networking software at Arista based in California, USA. He has been active in the IETF since the early 1990-ies, as key contributor to IPv6 standards,co-chair in Mobile IP and TRILL, and as an Internet Area Director. His interest is in expanding the reach and capability of the core Internet standards to datacenters, virtualization, and towards low-powered devices, by providing architectures and standards that are robust across a large range of scales. Erik holds a Technical Licentiate Degree from Uppsala University and a Master of Science from Stanford University.',
|
||||
|
||||
'Robert Sparks' : 'Robert Sparks is a member of the RFC Series Oversight Committee and the IAOC\'s Tools Development and Technology Management Committees. He is a co-chair of the STIR working group, and is a past-chair of the SIMPLE and GEOPRIV working groups. Robert was an Area Director for the Real-time Applications and Infrastructure area from 2009-2013. He is a co-author of the core SIP specification and several of its updates and extensions, and has focused on improving the level of interoperability of SIP implementations by coordinating the SIPit interoperability events. He is also an active open source contributor. Robert is a Senior Principal Member of Technical Staff at Oracle. Before joining Oracle, he was a Principal Engineer at Tekelec, the VP of Research and Development at Estacado Systems, CTO at Xten Networks (now CounterPath), and has held management and research positions at dynamicsoft, Lucent, Worldcom and Texas A&M University. For over 15 years, Robert has focused on designing and developing real-time IP communications systems. Robert has a BSc in Computer Science and a MSc in Mathematics from Texas A&M University.',
|
||||
|
||||
'Andrew Sullivan' : 'Andrew Sullivan is Director of DNS Engineering at Dyn, an Infrastructure as a Service company based in Manchester, New Hampshire, USA. He has been active in the IETF since 2005, and served as co-chair of the DNSEXT and SPFBIS working groups. His main areas of network specialization are the DNS and internationalization. Andrew holds a BA from the University of Ottawa and an MA from McMaster University, both in philosophy.',
|
||||
|
||||
'Dave Thaler': 'Dave Thaler is a Software Architect in the Windows Networking and Devices division at Microsoft. Prior to joining Microsoft in 1998, he was a routing developer at Merit Network. Since then, he has been responsible for multicast, IPv6, network diagnostics, and peer-to-peer efforts within Windows Networking, and also led the TCP/IP team during the design of the new TCP/IP stack in Windows Vista. Dave has been active in the IETF since 1995 and has authored over 20 RFCs, covering IPv6, multicast, MIBs, etc. He is also a member of the MIB Doctors group, and previously served as co-chair of the MALLOC WG. Dave holds a Ph.D in Computer Science from the University of Michigan. Website: http://research.microsoft.com/users/dthaler',
|
||||
|
||||
'Martin Thomson' : 'Martin Thomson is an engineer at Mozilla. There he works on open standards in both the IETF and W3C. His recent work includes HTTP/2 and Web Push, and he is a core contributor to HTTP, TLS, and WebRTC. He previously worked at Microsoft, Commscope and Nortel on system architecture. Technical interests are privacy, security, and the messy interface where standardized protocols are applied to real problems.',
|
||||
|
||||
'Brian Trammell' : 'Brian Trammell is a Senior Researcher at the CSG at the Swiss Federal Institute of Technology (ETH) Zurich. His primary focus is on network monitoring and measurement, specifically on performance measurement, security monitoring, measurement tools, and privacy issues in measurement and management. Active in the IETF since 2005, he\'s co-authored 15 RFCs in the Security and Operations/Management areas, and co-chairs the IP Performance Metrics working group. Prior to his work with CSG, he was Engineering Technical Lead at the CERT Network Situational Awareness group, and a veteran of a variety of short-lived Internet start-ups. He earned a BS in Computer Science from Georgia Tech in 2000.',
|
||||
|
||||
'Suzanne Woolf' : 'Suzanne is an independent consultant specializing in Internet infrastructure operations and policy. Her experience includes carrier network operations, DNS administration and root name server operations, IP address and DNS policy, infrastructure protocol development and implementation, and open source software engineering management in related areas. Her long-term background in technology and policy with the USC Information Sciences Institute, Internet Systems Consortium, ICANN, and current consulting clients have left her fascinated with the problems of technology at Internet scale, committed to building more open Internet, and warily interested in internet governance. Her primary technical interests include DNS and other naming systems, basic access and connectivity issues such as IPv4-IPv6 co-existence and the transition to IPv6, and supporting the growth of open systems in an increasingly compartmentalized and fragmented network.',
|
||||
|
||||
'Lars Eggert' : 'Lars Eggert is Technical Director for Networking in NetApp’s Advanced Technology Group, based in Munich, Germany. In addition, Lars is an Adjunct Professor at Aalto University, Finland’s premier technical university. He pursues his scientific research interests in diverse areas of Internet technology, including architecture, end-to-end protocols, virtualization, measurements and resource scheduling, through collaborative research projects with leading universities and research labs, in part supported by DARPA, the NSF or the EU. Lars has also been leading the standardization efforts of many related topics as a steering group member of the IETF, and he currently chairs the IRTF, the IETF’s research arm. He is a senior member of the ACM and the IEEE, and serves on the program and organization committees of many academic conferences and workshops, such as ACM SIGCOMM and IEEE Infocom. Lars received his Ph.D. in Computer Science from the University of Southern California (USC) in 2003. Before joining NetApp in 2011, he was a Principal Scientist at Nokia Research Center in Helsinki, Finland and one of Nokia’s most senior technology experts, serving on the corporation’s CTO Technology Council. Before that, he was a senior researcher at NEC Laboratories.',
|
||||
|
||||
'Ben Campbell' : 'Ben Campbell currently serves as a Principal Engineer at Oracle Communications, and as an Area Director for the Real-time Applications and Infrastructure (RAI) area of the IETF. He previously served as a chair for the DART, XMPP, and SIMPLE working groups.\nBen has worked in the IETF since 2000, primarily focused on real-time communication protocols. He co-authored several RFCs in the area, including RFC 3428 and RFC 4975. Prior to joining Oracle, he worked in the Tekelec CTO Team, and was a founding partner at Estacado Systems. When not reading internet-drafts, Ben enjoys sailing and middle-eastern percussion.',
|
||||
|
||||
'Alissa Cooper' : 'Alissa Cooper is a Distinguished Engineer at Cisco Systems, where she is responsible for driving privacy and policy strategy within the company\'s portfolio of real-time collaboration products. She currently serves as Real-Time Applications and Infrastructure (RAI) area director within the Internet Engineering Task Force (IETF). Previously, Alissa served as the Chief Computer Scientist at the Center for Democracy and Technology, where she was a leading public interest advocate and technologist on issues related to privacy, net neutrality, and technical standards. Alissa holds a PhD from the Oxford Internet Institute and MS and BS degrees in computer science from Stanford University.',
|
||||
|
||||
'Alexey Melnikov' : 'Alexey Melnikov is currently co-director of the IETF Applications and Real-Time Area and is the Internet Messaging Team Lead at Isode. In his spare time he also tries to help maintain Cyrus SASL. Alexey is the author or co-author of 29+ published RFCs related to electronic mail and application layer security. In the past he co-chaired the Sieve, Kitten and Usefor IETF Working Groups. Since 1998 his areas of interest have included IMAP, email filtering using Sieve, mobile network optimizations of application protocols, application protocol and format design, real-time collaboration and security frameworks for providing authentication and data integrity/confidentiality. Alexey received a bachelor\'s degree with honors in computer science and mathematics from Moscow State University.',
|
||||
|
||||
'Suresh Krishnan' : 'Suresh Krishnan works as a Distinguished Engineer at Ericsson where his main areas of work are in 5G wireless networks, network simplification, software defined networks and M2M. He has a Bachelor\'s degree in Electrical Engineering from the University of Madras in India and a Masters degree in Electrical Engineering from Concordia University in Canada. He has chaired the dna, intarea, and the sofwire working groups in the IETF, the mobopts research group in the IRTF and has authored more than 30 RFCs across multiple IETF areas.',
|
||||
|
||||
'Terry Manderson' : 'Terry is the Director of DNS Engineering at ICANN, he is responsible for L-root (one of the 13 root servers) and manages the talented team that keeps it humming along with the infrastructure supporting the portfolio of ICANN organisational domains. Terry also serves on the board of AusNOG, the Australian Network Operators Group. For almost all of his career he has held operationally focused roles and, while Terry has a number academic parchments on the wall, he prefers to see tangible links between concepts and actually deployability. In the research realm Terry is most interested in advancements in Internet networking (home, enterprise, global) and the behaviours of large scale network services and topologies, and the impact they have on the end user.\nTerry lives in Brisbane, Australia, with his wife Lauren, two daughters Phoenix and Caitlyn, and their highly trained attack guinea pigs. He gets his kicks from refereeing ice hockey and has an unhealthy fascination with motorcycles, especially Italian made sports bikes. Asking about what happened to the BMW motorcycles in Maastricht (IETF78) is unwise as the memory and pain is yet to fade.',
|
||||
|
||||
'Benoit Claise' : 'Benoit Claise is a Cisco Distinguished Engineer at Cisco Systems, working as an architect for embedded management and device instrumentation. Areas of passion & expertise include Internet traffic monitoring, accounting, performance, fault management, configuration management, deep packet inspection, and energy management. Benoit has been working in the IETF since 2001, mainly in the Operations and Management Area, with more than 30 RFCs in the domain of IP Flow Information eXport - IPFIX, Packet SAMPling - PSAMP, IP Performance Metrics - IPPM, Performance Metrics at Other Layer - PMOL, and Energy MANagment - EMAN. IETF WG: he currently serves as the IETF Area Director for Operations and Management, focusing on YANG-related activities.\n These days, Benoit focuses on configuration management, network automation, and data-model driven management. From a technology point of view, this means YANG as THE data model language, standard YANG data models, NETCONF and RESTCONF as the protocols, etc.\n Benoit is the author of the ciscopress book "Network Management: Accounting and Performance Strategies".',
|
||||
|
||||
'Joel Jaeggli' : 'Joel Jaeggli is a Network Architect at Zynga. Prior to serving as IETF Operations and Management Area director, he co-chaired the v6ops and opsec working groups.',
|
||||
|
||||
'Alia Atlas' : 'Alia K. Atlas has 15 years of experience in the routing area. She started with research at BBN, built and designed routers at Avici Systems, worked on data-center fabrics and management at Google, did network modeling and planning at British Telecom, and works on routing architecture and technologies at Juniper Networks. In the IETF, she was the co-chair of the RTGWG and I2RS working groups. She is an author of RFC 4090, RFC 5286, RFC 5440, RFC 5443, and RFC 5837. Knowing that "bad things happen to good networks", she has a technical interest in resiliency and fast-reroute in routing. Alia has a PhD in Computer Science from Boston University and a B.S. in Electrical Engineering from MIT. Alia works in the Routing Architecture and Technology group at Juniper Networks.',
|
||||
|
||||
'Deborah Brungard' : 'Deborah Brungard is a Lead Member of Technical Staff in network architecture and service planning at AT&T. Her current work is on SDN and NFV. She has been with AT&T for more than 30 years, working in various areas, primarily on international services and network operations. Early in her career, she was part of the first group of AT&T expatriates working in The Netherlands. She has been involved in standards development for more than 15 years and has held various leadership positions in IETF, ITU-T and ANSI. She has been most active in the Routing Area, Co-Chair of both CCAMP and TEAS. She received her Master of Engineering in Electrical Engineering from Stevens Institute of Technology, Hoboken, NJ, USA. Her main passion is escaping in her Silver Bullet (Airstream - the Taj Mahal for campers).',
|
||||
|
||||
'Alvaro Retana' : 'Alvaro Retana is a Distinguished Engineer at Cisco Systems, where he works on Strategic Customer Enablement. He also chairs the IETF-LAC Task Force for LACNOG, with the objective of increasing the participation of people from Latin America and the Caribbean in the IETF. He has published 4 technical books and has been awarded multiple patents by the US Patent and Trademark Office. Alvaro\'s current interests include Software Defined Networking, energy efficiency, infrastructure security, network complexity and other related topics.\n Alvaro has been participating in the IETF since 1998, mainly in the Routing Area. He previously co-chaired Routing Area Working Group (rtgwg) and the Source Packet Routing in Networking WG (spring), and has co-authored several documents on routing technology. Alvaro currently serves as Routing Area Director.',
|
||||
|
||||
'Stephen Farrell' : 'Stephen Farrell is a research fellow in CONNECT, a Science Foundation Ireland research institute and the school of Computer Science and Statistics at Trinity College Dublin, where he teaches and researches on security and delay/disruption-tolerant networking (DTN), and in 2006 co-authored the first book on the latter topic. He is a co-founder of Tolerant Networks Limited, a TCD campus company. Stephen has been a security area director since 2011.\nThe main funding that supports Stephen in his role as area director comes from the CONNECT centre, with additional support from IE Domain Registry Limited (IEDR - the .ie ccTLD) and Google.',
|
||||
|
||||
'Kathleen Moriarty' : 'Serving as the IETF Security Area Director, Kathleen Moriarty is also the Global Lead Security Architect with the EMC Office of the CTO working on technology strategy and standards. Kathleen has been the primary author of multiple published standards and actively contributes to security standards activity in the IETF. Previously, as the Practice Manager for security consulting at EMC, Kathleen was responsible for oversight of key projects, and development of security programs, in addition to serving as the acting CISO of a global investment banking firm. Kathleen has also been the head of IT Security at MIT Lincoln Laboratory and the Director of Information Security at FactSet Research Systems. Kathleen holds a Masters of Science degree in Computer Science from Rensselaer Polytechnic Institute.',
|
||||
|
||||
'Spencer Dawkins' : 'Spencer Dawkins is Senior Standards Manager at Huawei Technologies (USA) in Plano, Texas by day, and hand-drummer at IETF plenaries by night. Spencer began participating in the Internet Engineering Task Force in 1996, served as co-chair for the MARTINI, MEDIACTRL, and SIPCLF working groups in the Realtime Applications and Infrastructure Area, and as co-chair for the PILC working group in the Transport Area. Spencer is a recovering IETF process wonk, having served on the General Area Directorate and on the author team for RFC 3774, and as editor for several revisions to the NomCom process specification, and also served on the General Area Review Team from its formation in 2004 until he was selected for the IAB in 2010. Spencer also serves as Technical Director for the SIP Forum.\n Prior to joining Huawei, Spencer engineered GPRS and VoIP network monitor products for Inet Technologies/Tektronix, did product architecture for protocol accelerators at a start-up and for next-generation SONET switches at Fujitsu Network Communications, and served in a variety of roles at Nortel Networks, where he started out as a business systems computer programmer, but fast-talked his way into networking product development after reading Andrew Tanenbaum\'s "Computer Networks", which changed Spencer’s life. Spencer holds BBA and MS degrees from the University of North Texas, has a lovely wife named Shirley, and volunteers with early-teenaged kids, where the weirdness keeps him young.',
|
||||
|
||||
'Mirja Kühlewind' : 'Mirja Kühlewind is senior researcher at the Networked Systems Group of the Computer Engineering and Networks Laboratory at ETH Zurich. She received here PhD in 2015 from the University of Stuttgart where she worked on protocol design and TCP congestion control at the Institute of Communication Networks and Computer Engineering (IKR). Her research interests additionally include Internet measurements with a focus on middlebox impairments and cooperation. Further, Mirja is the project coordinator of a new EU research project in this area: Measurement and Architecture for a Middleboxed Internet (MAMI). Mirja was selected as IETF Transport Area Director in 2016; prior to that, she was co-chair of the IETF\'s RTP Media Congestion Avoidance Techniques (rmcat) and TCP increased security (tcpinc) working groups. She also co-chairs the Measurement and Analysis for Protocols research group (maprg) in the IRTF.' ,
|
||||
|
||||
}
|
||||
|
||||
|
||||
def add_biography(apps, schema_editor):
|
||||
Person = apps.get_model('person','Person')
|
||||
for name in bios.keys():
|
||||
person = Person.objects.get(name=name)
|
||||
person.biography = bios[name]
|
||||
person.save()
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('person', '0008_add_biography_field'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(add_biography, None)
|
||||
]
|
39
ietf/person/migrations/0010_add_photo_fields.py
Normal file
39
ietf/person/migrations/0010_add_photo_fields.py
Normal file
|
@ -0,0 +1,39 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import ietf.utils.storage
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('person', '0009_populate_biography'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='person',
|
||||
name='photo',
|
||||
field=models.ImageField(storage=ietf.utils.storage.NoLocationMigrationFileSystemStorage(location=None), upload_to=b'photos/', blank=True),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='person',
|
||||
name='photo_thumb',
|
||||
field=models.ImageField(storage=ietf.utils.storage.NoLocationMigrationFileSystemStorage(location=None), upload_to=b'photos/', blank=True),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='personhistory',
|
||||
name='photo',
|
||||
field=models.ImageField(storage=ietf.utils.storage.NoLocationMigrationFileSystemStorage(location=None), upload_to=b'photos/', blank=True),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='personhistory',
|
||||
name='photo_thumb',
|
||||
field=models.ImageField(storage=ietf.utils.storage.NoLocationMigrationFileSystemStorage(location=None), upload_to=b'photos/', blank=True),
|
||||
preserve_default=True,
|
||||
),
|
||||
]
|
46
ietf/person/migrations/0011_populate_photos.py
Normal file
46
ietf/person/migrations/0011_populate_photos.py
Normal file
|
@ -0,0 +1,46 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
|
||||
from hashids import Hashids
|
||||
|
||||
from django.db import migrations
|
||||
from django.conf import settings
|
||||
from django.utils.text import slugify
|
||||
|
||||
def photo_name(person,thumb=False):
|
||||
hasher = Hashids(salt='Person photo name salt',min_length=5)
|
||||
return '%s-%s%s' % ( slugify(person.ascii), hasher.encode(person.id), '-th' if thumb else '' )
|
||||
|
||||
def forward(apps,schema_editor):
|
||||
Person = apps.get_model('person','Person')
|
||||
images_dir = os.path.join(settings.PHOTOS_DIR,settings.PHOTO_URL_PREFIX)
|
||||
image_filenames = []
|
||||
for (dirpath, dirnames, filenames) in os.walk(images_dir):
|
||||
image_filenames.extend(filenames)
|
||||
break # Only interested in the files in the top directory
|
||||
image_basenames = [os.path.splitext(name)[0] for name in image_filenames]
|
||||
for person in Person.objects.all():
|
||||
dirty = False
|
||||
if photo_name(person,thumb=False) in image_basenames:
|
||||
person.photo = image_filenames[image_basenames.index(photo_name(person,thumb=False))]
|
||||
dirty = True
|
||||
if photo_name(person,thumb=True) in image_basenames:
|
||||
person.photo_thumb = image_filenames[image_basenames.index(photo_name(person,thumb=True))]
|
||||
dirty = True
|
||||
if dirty:
|
||||
person.save()
|
||||
|
||||
def reverse(apps, schema_editor):
|
||||
pass
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('person', '0010_add_photo_fields'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forward,reverse)
|
||||
]
|
|
@ -2,15 +2,19 @@
|
|||
|
||||
import datetime
|
||||
from urlparse import urljoin
|
||||
from hashids import Hashids
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.text import slugify
|
||||
|
||||
|
||||
from ietf.person.name import name_parts, initials
|
||||
from ietf.utils.mail import send_mail_preformatted
|
||||
from ietf.utils.storage import NoLocationMigrationFileSystemStorage
|
||||
|
||||
class PersonInfo(models.Model):
|
||||
time = models.DateTimeField(default=datetime.datetime.now) # When this Person record entered the system
|
||||
|
@ -23,6 +27,9 @@ class PersonInfo(models.Model):
|
|||
ascii_short = models.CharField("Abbreviated Name (ASCII)", max_length=32, null=True, blank=True, help_text="Example: A. Nonymous. Fill in this with initials and surname only if taking the initials and surname of the ASCII name above produces an incorrect initials-only form. (Blank is OK).")
|
||||
affiliation = models.CharField(max_length=255, blank=True, help_text="Employer, university, sponsor, etc.")
|
||||
address = models.TextField(max_length=255, blank=True, help_text="Postal mailing address.")
|
||||
biography = models.TextField(blank=True, help_text="Short biography for use on leadership pages.")
|
||||
photo = models.ImageField(storage=NoLocationMigrationFileSystemStorage(location=settings.PHOTOS_DIR),upload_to=settings.PHOTO_URL_PREFIX,blank=True)
|
||||
photo_thumb = models.ImageField(storage=NoLocationMigrationFileSystemStorage(location=settings.PHOTOS_DIR),upload_to=settings.PHOTO_URL_PREFIX,blank=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.plain_name()
|
||||
|
@ -84,6 +91,11 @@ class PersonInfo(models.Model):
|
|||
def full_name_as_key(self):
|
||||
# this is mostly a remnant from the old views, needed in the menu
|
||||
return self.plain_name().lower().replace(" ", ".")
|
||||
|
||||
def photo_name(self,thumb=False):
|
||||
hasher = Hashids(salt='Person photo name salt',min_length=5)
|
||||
return '%s-%s%s' % ( slugify(self.ascii), hasher.encode(self.id), '-th' if thumb else '' )
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
|
|
@ -104,6 +104,8 @@ MEDIA_URL = 'https://www.ietf.org/'
|
|||
IETF_ID_URL = MEDIA_URL + 'id/'
|
||||
IETF_ID_ARCHIVE_URL = MEDIA_URL + 'archive/id/'
|
||||
|
||||
PHOTOS_DIR = '/a/www/www6/'
|
||||
PHOTO_URL_PREFIX = 'photos/'
|
||||
|
||||
# Absolute path to the directory static files should be collected to.
|
||||
# Example: "/var/www/example.com/static/"
|
||||
|
|
62
ietf/templates/group/chair_photos.html
Normal file
62
ietf/templates/group/chair_photos.html
Normal file
|
@ -0,0 +1,62 @@
|
|||
{% extends "base.html" %}
|
||||
{# Copyright The IETF Trust 2015, All Rights Reserved #}
|
||||
{% load origin staticfiles %}
|
||||
|
||||
{% block morecss %}
|
||||
.well { max-width: 150px;}
|
||||
{% endblock %}
|
||||
|
||||
{% block bodyAttrs %}data-spy="scroll" data-target="#affix"{% endblock %}
|
||||
|
||||
{% block title %}Chair Photos{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% origin %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
<h1>Chair Photos</h1>
|
||||
|
||||
{% regroup chair_roles by last_initial as alphabet_blocks %}
|
||||
<div class="col-md-11">
|
||||
{% for letter in alphabet_blocks %}
|
||||
<div class="row anchor-target" id="{{letter.grouper}}">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">{{letter.grouper}}</div>
|
||||
<div class="panel-body">
|
||||
<ul class="list-inline">
|
||||
{% regroup letter.list by person as person_groups %}
|
||||
{% for person_with_groups in person_groups %}
|
||||
<li>
|
||||
<div class="well">
|
||||
{% if person_with_groups.grouper.photo_thumb %}
|
||||
<img width=100px src="{{person_with_groups.grouper.photo_thumb.url}}"/>
|
||||
{% endif %}
|
||||
{% if person_with_groups.grouper.photo %}
|
||||
<div><a href="{{person_with_groups.grouper.photo.url}}"><strong>{{person_with_groups.grouper.plain_name}}</strong></a></div>
|
||||
{% else %}
|
||||
<div><strong>{{person_with_groups.grouper.plain_name}}</strong></div>
|
||||
{% endif %}
|
||||
<div>
|
||||
{% for role in person_with_groups.list %}
|
||||
{{role.group.acronym}}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="col-md-1 hidden-print bs-docs-sidebar" id="affix">
|
||||
<ul class="nav nav-pills nav-stacked small fixed" data-spy="affix">
|
||||
{% for letter in alphabet_blocks %}
|
||||
<li><a href="#{{letter.grouper}}">{{letter.grouper}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
8
ietf/utils/storage.py
Normal file
8
ietf/utils/storage.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
from django.core.files.storage import FileSystemStorage
|
||||
|
||||
class NoLocationMigrationFileSystemStorage(FileSystemStorage):
|
||||
|
||||
def deconstruct(obj):
|
||||
path, args, kwargs = FileSystemStorage.deconstruct(obj)
|
||||
kwargs["location"] = None
|
||||
return (path, args, kwargs)
|
Loading…
Reference in a new issue