text:
The NSM
America's Premier White
Civil Rights Organization
Join the NSM
The National Socialist Movement
Die Nationalsozialistische Bewegung
( an American
Nazi party )
Tap Here for
The Main Page
25 Point Plan
Black behavior
Hate Crime Laws
Jew World Control
Leadership Guide
Top Comments:
Friedrich (not verified)
It's all a matter of perspective…
Webmaster (not verified)
you think you're special
0987654321 (not verified)
That is precisely the answer I would expect…
Because it is a lie…
Not all women vote on…
Amelia (not verified)
Lemme Guess..
Covenant Soldier (not verified)
Apologies and Question
? (not verified)
As everyone in America has…
Clarification.
His question is valid…
RE:White decline
Sgt. BK (not verified)
All I can speak for is my…
White decline
Whiteboy (not verified)
Ashkenazi Jews may be identified…
Jews actually being the world's APEX parasite…
Just to Add..
Encouraged By This
I'll give this a shot…
Hehe I guess what makes me…
The NSM isn't a total…
Maybe I'll find my future…
Welcome to the approximately 3%…
I'm new here and just wanted…
This website is certainly…
RE: NJP
Bill (not verified)
just like white people…
:) (not verified)
My first major COONTACT…
Scientific racism is demonstrable fact…
What I bet
Scientific racism
Use a few more adjectives…
SerotoninSyndrome (not verified)
We've done more than most big mouth internet Nazis
SS Captain Jam… (not verified)
The point of street activism
America's Nazi Party
Why should YOU support the NSM? (a PDF document)
The NSM is America's Nazi Party, the largest and most active National Socialist party in America today. We are the political party for every patriotic White American of moral strength and good character.
We cooperate and work with many like-minded white nationalist groups and others that are either National Socialist or at least racially aware of our shared European heritage.
The NSM's core beliefs include defending the rights of White European people, the diaspora of Europe found everywhere. We work toward the preservation of our European culture and heritage, strengthening our family values, encouraging economic self-sufficiency, the reform of illegal immigration policies, the immediate withdrawal of our national military from an illegal Middle Eastern occupation and the promotion of White racial separation.
The National Socialist Movement was founded in 1974 and saw its largest membership surge under the leadership of Commander Burt Colucci. Commander Colucci has worked to implement a new direction for the Party, one that includes focusing on making this a truly American National Socialist Movement, one which will give Americans the choice of supporting a party that will combine the best of both National Socialism and private, free market Capitalism, to create a system that will stop our foundational decay, while bringing innovation, prosperity, and security to all of White America.
The current two-party political system is irreversibly flawed, where each party in power, works to dismantle the achievements of the previous party — as the cycle repeats, wasting billions in taxpayer dollars. Progress is brought to a virtual standstill, as the two major parties spend most of their time bickering, rather than putting the needs of the country first!
In keeping with our White family-friendly policies, membership is open to non-Semitic heterosexuals of genetic European descent. If you really care about your heritage and for the future of your family, your race and your nation, contact Party Commander, Burt Colucci or Chief of Staff, Butch Urban about starting your own membership in the NSM, today!
Are you ready to stand up and fight for your family, your race, and for your nation? If not you, then who? And if not now, then when?
Destiny is not a matter of chance. It's a matter of choice. It is not a thing to be waited for, it is a thing to be achieved.
— William B. Jennings
Search The NSM
The NSM is defending the rights of White people everywhere, preserving our European culture and heritage, strengthening White family values, promoting economic self-sufficiency, and encouraging White racial separation.
Copyright © 2020-2023 The NSM · All Rights Reserved. You must be 18+ to use this website.
Site design by The NSM


text:
DR. THOMAS BELLUT, DIRECTOR GENERAL ZDF GERMAN TELEVISION TO RECEIVE 2021 INTERNATIONAL EMMY® DIRECTORATE AWARD
Network Recognized by Academy as it Prepares to Celebrate Its 60th Anniversary
New York, December 1, 2020 – Dr. Thomas Bellut, Director General of German national broadcaster ZDF, one of Europe's major and most renowned public broadcasters, will receive the International Academy's 2021 Directorate Emmy® Award, it was announced today by Bruce L. Paisner, President & CEO of the International Academy of Television Arts & Sciences. The International Academy's Special Emmy will be presented to Bellut at the 49th International Emmy® Awards Gala, on Monday, November 22, 2021 in New York City.
The presentation of the award to Mr. Bellut was originally planned for the 2020 International Emmy® Awards ceremony, in recognition of his outstanding leadership of ZDF and in commemoration of the 30th anniversary of the reunification of Germany, to which ZDF contributed with intensive coverage. It was postponed to 2021 due to covid-19 related circumstances. In 2021, ZDF will mark the 60th anniversary of the organization's founding.
"Thomas Bellut is an outstanding journalist, broadcaster and executive, with a 30-year career at ZDF who has made an important mark on television in Germany and beyond", said Bruce L. Paisner, President and CEO of the International Academy. "It's a year later than we had planned, but we're still very pleased that he will receive our Directorate Emmy next November."
Dr. Thomas Bellut:"In Germany we particularly appreciate the value of free and independent media. I am therefore very pleased that the Academy has expressly linked the award with the ZDF's achievements in the context of German reunification. This singular chapter of contemporary history has shaped my professional life as a journalist and media manager "
Bellut became director general of German public television broadcaster ZDF in 2012, after serving as the company's program director for a decade and before that as correspondent and managing editor in the news division, for over 25 years. Since his appointment at the helm of the channel, he has made quality dramas a priority while continuing to produce popular non-scripted shows, including major global success and International Emmy winner Generation War; the 1950s-set miniseries Ku'damm 59; and long-running natural-history and science series Terra X. In an effort to better compete on the streaming front, Bellut recently called for cross-linking the content of on-demand services with other German public broadcasters instead of attempting to set up one central OTT platform.
On behalf of ZDF, ZDF Enterprises, of which Thomas Bellut is Chairman, is responsible for worldwide program sales, the implementation of international co-productions, license purchasing for quality programs, marketing online rights and the merchandising of strong ZDF program brands. In addition to its commercial activities for ZDF, ZDF Enterprises has also been able to establish itself successfully as an independent market player in both national and international environments. As part of the ZDF group, the company has at its disposal the largest German-language program collection in the world, consisting of series and mini-series, TV movies, documentaries and children's programs.
About Thomas Bellut and ZDF
Since March 2012, ZDF has been headed by Director- General Thomas Bellut. He was elected by the 60-member governing body, the ZDF Television Council, which represents the interests of the general public. Part of its role is to establish and monitor program standards. Responsibility for corporate guidelines and budget control lies with the 14-member ZDF Administrative Council. ZDF is based in Mainz, but also maintains permanent bureaus in the 16 Länder capitals as well as special editorial and production facilities in Berlin. For international coverage, ZDF has foreign correspondents operating in 19 permanent bureaus worldwide. ZDF offers full-range generalist programming with a mix of information, education, arts, entertainment and sports. Its coverage provides both a broad view on the world and a comprehensive picture of Germany. ZDF also operates the two thematic channels ZDFneo and ZDF info. In partnership with other public broadcasters, ZDF jointly operates the internet-only offer funk, the German channels Phoenix and Kika and the European channels 3sat and Arte.
About The International Academy of Television Arts & Sciences
The International Academy of Television Arts & Sciences is a membership-based organization comprised of leading media and entertainment figures from over 60 countries and 500 companies from all sectors of television including internet, mobile and technology. The Academy's yearly schedule of events includes the prestigious International Emmy® Awards held in New York, The International Emmy® Kids Awards at MIP and a series of industry events such as Academy Day, The International Emmy® World Television Festival and Panels on substantive industry topics. The International Academy of Television Arts & Sciences recognizes excellence in television produced outside of the United States, as well as US Primetime programs produced in languages other than English, with the prestigious Emmy® Award. Currently celebrating programming across varied areas including: Arts Programming, Current Affairs, Comedy, Documentary, Drama Series, News, Non-Scripted Entertainment, Short-Form Series, Telenovela, and TV Movie/Mini-Series, it also recognizes excellence in Performances and Kids programming. For more information, go to www.iemmys.tv
The International Academy of Television Arts & Sciences
Eva Obadia, Senior Director, Communications & Partnerships
eva.obadia@iemmys.tv
The Lippin Group
Matt Biscuiti
matt@lippingroup.com
CategoriesPress Releases
Previous PostPrevious 2020 INTERNATIONAL EMMY® WINNERS ANNOUNCED LIVE AT CEREMONY HELD FROM NEW YORK CITY
Next PostNext 2021 INTERNATIONAL EMMY® AWARDS NEWS & CURRENT AFFAIRS NOMINEES ANNOUNCED

redpajama_set_name: RedPajamaCommonCrawl


C# 6.0 and the .NET 5 Framework, 7th edition Pdf This brand new 7th edition of Guru C# 6.0 along with also the .NET 4.6 Platform was fully revised and rewritten to reflect the most recent modifications to the C# language specification along with new improvements from the .NET design. You'll discover new chapters covering each of the important new features which make .NET 4.6 that the most extensive launch yet, such as: This comes together with award winning coverage of heart C# attributes, both new and old, which are made the previous versions of this book so common.
Readers will obtain a good base of object-oriented growth methods, attributes and reflection, generics and collections in addition to numerous complex topics not found in other texts (like CIL opcodes and emitting lively assemblies). As soon as you digest the information presented in those chapters, you're going to be in an ideal place to employ this information to your particular programming assignments, and you will be well equipped to explore the . NET world in your own terms.


When an individual falls desperately behind in his or her debt payments, one option may be to declare bankruptcy. Bankruptcy is a legal proceeding in a federal bankruptcy court that relieves the debtor of some (or all) of his or her debts. While bankruptcy may not be the best option for everyone, in the right situations, it can provide people with a fresh start.
In 2005, Congress passed and President George W. Bush signed the Bankruptcy Abuse Prevention and Consumer Protection Act (BAPCPA), a bankruptcy reform law. One of the requirements BAPCPA imposes on a bankruptcy debtor is to receive credit counseling from an approved credit counseling agency before the bankruptcy filing.
No matter what circumstances ultimately led to filing bankruptcy, both the practical and the emotional impacts on the debtor will be enormous. Confronting the emotional and psychological issues surrounding bankruptcy and reaching an understanding and acceptance of the situation are essential to rebuilding and maintaining a successful financial life.


text:
Areobindo (console 434), console nel 434
 Areobindo Dagalaifo Areobindo, nipote del precedente e console nel 506
 Areobindo (magister militum)

redpajama_set_name: RedPajamaWikipedia


The mission of Chesterfield County Public Schools Prekindergarten is to offer opportunities for low income families to have access to a high quality PreK program before their children enter kindergarten. Unfortunately, there are limited spots for many families who want to apply and we have large numbers of families who attend our events. Volunteers will be at the Chesterfield County Fairgrounds assisting with application events and serving in various capacities.
Some of the areas of need include greeting families, showing families how to navigate the application process, serving as a runner between application stations, playing with the children in the toy area, and working at application tables for additional assistance as needed. Volunteers will be trained for each station in which they are working. We are looking for people who love to help others and are flexible with how they can help as needs may change during our very busy events. Volunteers will fulfill an invaluable role as they will help the process go more smoothly and move more quickly for our families. Without additional help, families may be on site for extended amounts of time and many of them are missing time at their jobs to be present at the event.
Plenty of parking is available on site.  Volunteers should park in the paved lot behind the chain link fence.  A sign will be posted.
Dress comfortably with very comfortable walking shoes. Snacks and water will be provided. There is very little time for lunch as the pace of our events can be extremely busy.  Volunteers are certainly welcome to take breaks to eat, however.  We greatly appreciate any help that can be offered.


text:
Changan will demonstrate a new crossover in Geneva
January 10, 2020	0	By autotimesnews
The Chinese brand has announced the upcoming new product under the name Uni-T, which will debut at the Geneva auto show.
It should be emphasized that Changan will for the first time show its own products at the Geneva Motor Show. In March of this year, the Chinese brand will show here a new cross called Uni-T, which previously had the in-plant designation S202.
It is known that the length of the new Changan Uni-T will be 4515 mm, and the distance between the axles will be equal to 2710 mm. The machine will acquire a bold appearance that differs from the current models of the company. The crossover will also receive fully LED optics, retractable front door handles, trapezoidal tailpipes of the exhaust system and a forked spoiler.
The interior of the upcoming news is kept secret. Changan Uni-T will be equipped with 1.5 and 2.0 liter turbo engines. Most likely, cars will not be equipped with an all-wheel drive system. Other details will become known in March this year, when the Geneva Motor Show opens its doors.
Mitsubishi showcases Tokyo's new Delica and Eclipse Cross air suspension versions
Bugatti announces teaser exit for successor Chiron


Fixed Box creation with nested connected plugs. This allows the creation of Boxes with shader nodes with input connections.
Fixed removal of nodules from nodes in the graph ui when Plugs are removed.
Fixed InputGenerator bugs and added python bindings and tests.
Fixed Group bugs involving dynamically generated inputs and undo (#179, #210, #302).
Tidied up node menu labels.
Renamed WriteNode to ObjectWriter and ReadNode to ObjectReader (#17).
Fixed minimum height of ramp editor (#445).
Fixed empty messages from ErrorDialogue.ExceptionHandler.
Added popup error dialogues for file save failures (#449).
Fixed context used by interactive render nodes.


text:
Q: pageslide plugin does not fire postback I'm using the PageSlide plugin. I added a form to the div#modal, ASP label and a button.
However, the button just doesn't fire a postback event upon click.
HTML:

<title></title>

<link href="css/jquery.pageslide.css" rel="stylesheet" type="text/css" />

<form id="form1" runat="server">

 Show

  <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

  <asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click"/>

Close

</form>

Code-behind:
protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = "Its Working";
}

Can anyone please tell me what's wrong? Thanks in advance. :)

A: In my opinion, the reason for such behavior is because plugin clones modal div and use cloned content to show modal popup. Thus, the Button1 doesn't placed in form anymore and doesn't causes postback on click.  Try to set UseSubmitBehavior="false" button's property. This way postback should be fired via javascript instead of defaulr submit button's behavior

redpajama_set_name: RedPajamaStackExchange


What a great summer office party! We created an amazing day of beach activities surprising all with a Pro Volleyball Camp hosted by Sinjin Smith and Randy Stoklos. It was a great day of fun in the sun including a tasty lunch spread, frozen margaritas, a cart of ice-cream bars, baci ball, surfboards, horse shoes and even a tarot card reader for the non athletes in the crowd. And we sent everyone home with a great beach bag full of seaside party favors.


Anchor Service Station listed in MOT Testing Centres located in Preston.
Cafcass listed in Central Government located in Preston.
Penwortham Fire Station listed in Fire Departments located in Preston.
Ashton Lane Ends Post Office listed in Post Offices located in Preston.
Longridge Sub Post Office listed in Post Offices located in Preston.
Plungington Road Post Office listed in Post Offices located in Preston.
S & J Motors Ltd listed in MOT Testing Centres located in Preston.
Brookfield Post Office listed in Post Offices located in Preston.
Cop Lane Sub Post Office listed in Post Offices located in Preston.
Broughton Post Office listed in Post Offices located in Preston.
Blackpool Road Post Office listed in Post Offices located in Preston.
Find Best Public Services & Government in Preston UK on UKCircle. Get reviews, Telephone no & Address for Top Public Services & Government in Preston along with photos, opening hours and more. Advertise Public Services & Government business for free on one of Preston Largest Local business directory and phonebook.


text:
Glasgow North
Plans to open a climbing centre in the north of Glasgow unveiled
Get your climbing gear on, Maryhill - there could be a new leisure facility coming your way
(Image: The Climbing Academy Glasgow/Facebook)
Plans to open a family-friendly climbing centre in the north of Glasgow have been submitted to Glasgow City Council.
The proposal - submitted this week - is from The Climbing Centre in Kinning Park, which opened in 2011.
The plan is provide a second site for daredevils looking to get into the sport on the other side of the Clyde, this time at an existing trading estate unit in Maryhill.
'Scotland's coolest office' is hiring again - here's what the job entails
The planning app reads: "Climbing centres within Glasgow are currently clustered to the south of the river Clyde and the applicant is keen to provide a new facility in the north western part of Glasgow to spread the distribution of facilities across the city."
If approved, the centre would be built at Glasgow North Trading Estate in Craigmont Street, and include bouldered climbing areas, a Clip 'n' Climb (offering climbing challenges for all ages), changing and viewing areas, an event and training space and a cafe.
Craigmont Street (Image: Google Maps)
The place would provide 12-16 general jobs as well as work for 4-8 experts with qualifications.
The application adds: "By converting the subject premises into a state of the art climbing centre, the applicant will bring a new
leisure and sport offering to the north west of Glasgow.
Savvy entrepreneur couple open up their own barber shop...in a converted shipping container
"Furthermore, the proposed installation of a Clip 'n' Climb facility within the building will prove a further attraction as currently Edinburgh is the only city with such a facility in Scotland.
"This facility is targeted at beginner climbers and is intended to provide an easy way for people to get involved in the sport."
The proposal will now go before Glasgow City Council for approval.


Swedish group of singers and musicians, who are searching for the roots of American gospel music. By listening to traditional black gospel artists like the Dixie Hummingbirds, the Caravans, the Famous Ward Singers and the Soul Stirrers, SGT has been inspired to perform their own credible interpretations of a great folk art.
The group's leader, Per "Slim" Notini, earned fame when he, as the twenty-one year old "Stockholm Slim", played the piano in a blues recording session in Chicago ("West Side Soul" by Magic Sam) in 1967. After forming his own band, he explored the blues, singing and playing professionally for several years in the 1970s and '80s. He also recorded (Sonet Records) and appeared on radio and TV in Sweden.
Per made a radical change in the early 1990s. He started a serious study of black gospel and also tried his hand at composing and arranging. One of his own songs, "Vardagsbur", with Swedish lyrics, is included in this CD. Per made his debut in gospel, accompanying American singer Cyndee Peters in 1975-76, at school concerts all over Sweden. Beginning in 1999,Per has arranged tours in Sweden, Norway and Denmark with gospel luminaries like the Dixie Hummingbirds, Dr. Horace Clarence Boyer and Ola Jean Andrews.
In Summer 2014 has SGT together with Kiralina Salandy among other performed at Crescendo (Norrköping), Jazzens Museum (Strömsholm),Skottvångs Grufva (Mariefred) and Kungsträdgården (Stockholms Gospelkörfestival).
It was 2014 in Katarina congregation in Stockholm that Per met Kiralina Salandy for the first time – a singer from Canada with her roots in gospelmusic and musical liking arised. She started to sing with SGT as a much appreciated solosinger.
Musicians in SGT are Per Notini – Keyboard, piano, Hasse Larsson – Base and James Bradley Jr – Drums.


text:
Q: Custom dependency management plugin in Gradle How do you write a custom gradle plugin to handle dependencies in a custom module descriptor, from a custom repository? The gradle documentation says the following, but I haven't been able to find anything that tells me how.

Even if your project is using a custom dependency management system or
  something like an Eclipse .classpath file as master data for
  dependency management, it is very easy to write a Gradle plugin to use
  this data in Gradle.

I've been maintaining a Custom Ivy resolver for ATG projects (forked from this project), but Gradle recently deprecated this with version 1.8, and I need to port the implementation to a native Gradle plugin.
Implementations of ATG use 'modules' (not unlike Gradle projects), that have a MANIFEST.MF file for a module descriptor. These files define other 'modules' that a module depends on, and also a list of paths (jars or directories) that form the (direct) classpath for the current module.
e.g.
ATG-Class-Path: lib/classes.jar lib/commons-beanutils-1.7.jar
ATG-Required: MyProj.core MyProj.integration.webservices DAF.Endeca.Assembler

Module dependencies are transitive, and may refer to custom modules or modules that sit within the ATG product installation. Hence, I need to define a custom repository that can use the ATG product installation as a source of artifacts.
Without Gradle, I need to maintain dependencies in the form of

*

*ATG's MANIFEST.MF files

*Eclipse .classpath files

*Dependencies for the Ant build-script

*SonarQube configurations

Since I can't get rid of the ATG MANIFEST.MF files, I would like to write a write a custom plugin to allows them to be used in Gradle builds. I can then use Gradle as my build system, which can also generate Eclipse .classpath and .project files, and run Sonar against the project.
Gradle seems to have a lot of source code, and rummaging through it for the last couple of days hasn't got me anywhere.
If someone can point me to a list of interfaces that need to be implemented to (1) implement a custom repository, and (2) implement a custom dependency resolver (to use custom files as module descriptors), that should be enough to get me started.

A: The Eclipse .classpath use case mentioned above can be solved by parsing that file and translating it to Gradle file dependencies. It isn't currently possible to plug in a custom repository implementation.


Digital life connects—and disconnects—adults in life and faith. People today experience faith and life through a digital lens.
Because people are feeling some disconnect, what are we doing to provide connecting opportunities (in the real world as well as the virtual world)?
In this world of constant connectivity, are we helping people to also deepen their connectivity with God?
The first generation of digital natives are coming of age—and inaugurating a new young adulthood unlike any generation before. The research illustrates that their ease with technology has revolutionized the way Millennials engage with the world. What is fascinating is that the first generation to grow up as digital natives is looking not for mere flashing lights, but for substance. An overwhelming 87% of Millennials in the research study said they want to live a meaningful life.
Where are we – as a Christian community - in the Millennials search for a meaningful life?
Do we help them explore what a meaningful life would be? Do we have our preconceived ideas to pass on to them or are we willing to engage in conversation, perhaps discovering together new – and more faithfully committed – ways to live that life today?
Twenty-four-seven digital availability means greater expectations in one's work and social lives. In the research, 47% said their devices have made them more productive, while 53% believe their devices have made them more distracted.
Do our faith formation efforts (at all ages) help people balance their lives?
Do we share with them the sacred ways of our traditions which help people to set priorities, to stay focused on what is important, to live with a Sabbath-consciousness?


text:
treocentral.com >> Stories >> Business
Palm and Vodafone Announce 750v, available in Europe in October
Tue Sep 12, 2006 - 10:59 AM EDT - By Dieter Bohn
TreoCentral is at CTIA - updates throughout the day
See our Video Interview and Hands on Interview Here!
Palm has finally made it official, announcing details on the new Treo 750v. The new 750v is the first Treo to ship without an antenna, a long-awaited form factor.
Availability on Vodafone's European GSM network is expected to be October 2nd - though preorders are available now for new connections. More information on availability as we receive it - but it does not appear that the 750v will be available in the US initially. Palm lists the following countries as having the 750v available soon: Austria, Switzerland, France, Germany, The Netherlands, Italy, and the United Kingdom and "other regions by the end of the calendar year" (from their press release. Whether "other regions" mean the US is unclear - more likely it does not - we're checking into it).
The Treo 750v runs Windows Mobile 5 Pocket PC Edition and features specifications similar to the Treo 700wx - namely 128 megs of memory (60 available for user storage), a 240x240 touchscreen, 1.3 megapixel camera, and a full qwerty keyboard.
Hardware-wise, there are several differences to mention, though. As the first GSM Treo to be released in some time, the 750v sports some healthy upgrades to the radio: It will run on Vodafone's GSM network - EDGE and UMTS providing very high data speeds. Other differences from previous Treos include:
UMTS/EDGE
GSM/GPRS/EDGE/UMTS radio,
GSM bands: 850/900/1800/1900,
UMTS bands: 850/1900/2100
Note: Looks to just be 3G, not 3.5G HDSPA
No external antenna
the 750v has slimmed-up a bit: clocking in at 111mm x 58mm x 22mm and 154 grams - one millimeter thinner and 26 grams (1 ounce) lighter than other 700 series Treos.
Generally speaking, the 750v has a more rounded shape, making it feel smaller overall
The reduced size does appear to come with a smaller battery, 1200mAH, though talk time is still very good: up to 4.5 hours GSM / 2.5 hours UMTS; standby time: 10 days.
edit: pop-up stylus unconfirmed The reduced size also means that Palm has switched to a pop-up stylus (similar to the ones found in their original Tungsten T line).
The 750v uses a different processor, a 300mhz Samsung. Previous Treos had used Intel XScale processors.
the 750v uses a miniSD slot for expanded memory in place of the SD card slot.
support for Bluetooth stereo headsets
The Operating System is Windows Mobile 5 Pocket PC Phone edition. It too features some great features:
the first WM5 Treo to support threaded SMS text messaging (Hooray!).
Bluetooth and/or USB Dial-Up Networking is also built-in.
Fully compatible with Microsoft's Direct Push Technology and with Vodafone Business Email
Palm has also provided a brief video of the device. Product specs are here. As with previous Treos, WiFi is not built in. Program memory is unknown as of this writing, but we'll update that soon too.
You can read the full press release here. TreoCentral is at the CTIA Expo now and we'll have continuing coverage throughout the next few days, so stay tuned. Meanwhile, you can discuss the 750v in our New Forum Section.


text:
Q: ListBoxItem animation and opacity I have a Listbox with styles, including Listboxitem with styles. I am trying to create an animation that changes opacity from 0 to 1, to make items show on the list. I've managed to do this with the following code:
<Style x:Key="ListBoxStyle1" TargetType="ListBox">
            <Setter Property="Foreground" Value="#FF393C3F" />
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBox">
                        <Border Name="Border" Background="{x:Null}" BorderBrush="Black" BorderThickness="0" Padding="0">
                            <ItemsPresenter />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
            <Setter Property="Opacity" Value="0" />
            <Setter Property="Height" Value="16" />
            <Setter Property="VerticalContentAlignment" Value="Bottom" />
            <Setter Property="VerticalAlignment" Value="Bottom" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Border Name="Border" Padding="10,1,0,0" Background="{x:Null}">
                            <ContentPresenter VerticalAlignment="Center" SnapsToDevicePixels="True" />
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="true">
                                <Setter TargetName="Border" Property="Background" Value="{StaticResource arrow}" />
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter Property="Foreground" Value="#FF828689" />
                            </Trigger>
                            <Trigger Property="IsVisible" Value="true">
                                <Trigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.0" To="1.0" Duration="0:0:0.4" />
                                        </Storyboard>
                                    </BeginStoryboard>
                                </Trigger.EnterActions>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

The thing works as it should (apart from that I want more time to pass between current and next item animation start. But it has a problem with opacity. Everything possible is set to transparent, backgrounds and all. And I use transparent .png brush for selected item.
The problem is with the opacity animation and is best seen on the bottom picture:

This is a screenshot in the middle of animation (at the time the opacity of the listboxitems is 0.8) and you can clearly see white background around all text. It's even more visible in the first selected item, because it uses transparent .png. This background magically dissapears when animation is finished and the opacity is 1.0.
How to fix this problem? Did I forget to set any background perhaps?
Thank you for your help!
Edit:
I am adding my listbox declaration:
<ListBox Height="239" HorizontalAlignment="Left" Margin="0,0,0,0" Name="listBox1" VerticalAlignment="Top" Width="145" Background="{x:Null}"  FontWeight="Black" FontSize="8" BorderBrush="{x:Null}" SnapsToDevicePixels="True" BorderThickness="0" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Style="{StaticResource ListBoxStyle1}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel VerticalAlignment="Top" Background="{x:Null}" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

Also another question is: How to delay the animation that each listboxitem would be displayed with a delay of few milliseconds before the next one?
Thank you for all your help.

A: This might be a system dependent rendering anomaly, i tried that style (only had to use my own selected item image, also a transparent PNG) and it worked quite nicely.
In one application of mine images set to the Fill property of Rectangles were weirdly stretched on one of my computers (which even had the same operating system, Win7 Professional) so that would not be unheard of...

A: I have fixed the problem. The problem was that in code I was overriding window's AllowTransparency flag. Now it works as it should. If anyone would encounter a similar problem.


Conklin's Authentic Barnwood was established in January 1970 by Leo L. Conklin and his son, Terry. In 1976, Leo's wife Sandy joined the business. As pioneers in the industry, they began a journey that would take them from rural Susquehanna County, Pennsylvania, to be known worldwide as one of the leaders in recycled lumber. As the business grew, the Conklin family found many ways to create architectural treasures by developing different techniques to bring out the beauty of aged wood. From richly patinated flooring to hand hewn ceiling beams, to beam mantles or custom crafted farm tables, Conklin's offers a variety of services with all the same quality and high standard you've come to expect with the Conklin name. This is just one reason why Conklin's Authentic Barnwood is truly one of the best kept secrets in Lakeside, Pennsylvania.


Your cakes always taste delicious.
I go to the shop every Sunday.
Most kids learn to ride a bike when they are six.
We're driving to the shop.
I'm learning English so I can go on holiday.
He is living with friends until he finds his own place.
My car has broken down, so I'm taking the bus to work.
He always leaves his dirty socks on the floor.
He is always leaving his dirty socks on the floor.
He is always ignoring me.
The Present Simple is used to talk about actions that repeat.
It is also used to say that something is permanent.
The Present Continuous is used to talk about something happening now.
It is also used to talk about temporary situations.
The Present Continuous with always means that you are annoyed by an action by someone else.


Facebook Friday 23/06/17! Print marketing and how it can still work for you!
Lets talk about print marketing and how it can still work for you in the internet age! I'll also show you a compact, really cool, cost effective print piece you can create for yourself to present to your clients!


text:
The Killers have made "a good start" on their eighth album, says Dave Keuning
Dave Keuning has spoken about rejoining The Killers for their upcoming seventh album, revealing that they're "already working on the eighth one together".
The guitarist, who founded the Las Vegas band in 2001, stepped down from his role in 2017 to pursue a solo career. He went on to release his debut album 'Prismism' in 2019, with its follow-up 'A Mild Case of Everything' arriving last week.
Speaking to NME during a recent 'In Conversation' interview, Keuning was asked about Brandon Flowers and co's new "concept record", which is expected to arrive in August. It comes after the musician was spotted in the studio with the group back in January.
"It still sounds like The Killers," Keuning said of the album. "A lot of these songs were ready to be recorded, and I would come in and play guitar.
"I did actually come in with a few song ideas that we worked on together and then made the record, so that was fun. It's different."
Dave Keuning (Picture: Press)
The guitarist went on to say that he'd wanted to "do more concept records a while ago", and hone in on one particular style of music.
"I'm just happy to be back in any capacity on the seventh record and now that that's done, I'm just excited to write and see where the eighth one goes," Keuning told NME.
"I don't think we know what it'll sound like. It's too early, but we're writing ideas for it and we've got quite a few already, so we have a good start."
Although he didn't contribute to The Killers' 2020 album 'Imploding The Mirage', Keuning revealed that he's been learning the featured tracks in preparation for the band's next tour. He also tackled the "awkward question" of what he thought of the record's songs.
"I'm happy to play them live, I'm not gonna do nothing," he told NME. "I wanna play the songs."
Keuning added: "The songs are good, it's just… it is weird not knowing how to feel.
"I guess I compare it to a sports team that you were a part of, and then when you're not on that team… do you root for the team or against the team. And now I'm back on the team."
You can watch the full video interview above.
The update comes after drummer Ronnie Vannucci Jr. spoke about The Killers' "very different" new record earlier this month. Frontman Flowers, meanwhile, told NME that it "might be even better" than 'Imploding The Mirage'.
← SEVENTEEN – 'Your Choice' review: a worthy spiritual successor to their earliest hits
Eprom drops off cutting-edge remix of 'Look What I Got' →


text:
當前的資料夾
查看所有紀錄
| 香港教育文獻數據庫
教育主題
線上搜尋書籍、章節、期刊論文及報告
快速搜尋:
打開篩選條件
已篩選條件
人物: Lee, Theodore Tai Hoi
[RC] 教育規劃及決策程序、教育體系行政 (1)
[RE] 學校內部管理、學校與家長之關係 (1)
Lee, Theodore Tai Hoi (2)
Cheng, Yin Cheong (1)
Hallinger, Philip (1)
Ko, James (1)
Szeto, Elson (1)
由 2023 2022 2021 2020 2019 2018 2017 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000 1995 1990 1985 1980 1975 1970 1965 1960 1955 1950 1945 1940 1935 1930 1925 1920 1915 1910 1905 1900 1895 1890 1885 1880 1875 1870 1865 1860 1855 1850 1845 1840 1835 1830 1825 1820 1815 1810 1805 1800 至 2023 2022 2021 2020 2019 2018 2017 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000 1995 1990 1985 1980 1975 1970 1965 1960 1955 1950 1945 1940 1935 1930 1925 1920 1915 1910 1905 1900 1895 1890 1885 1880 1875 1870 1865 1860 1855 1850 1845 1840 1835 1830 1825 1820 1815 1810 1805 1800
專上教育 (1)
未指定或無法歸類 (1)
文件類型
期刊論文 (2)
Leadership & Policy in Schools (1)
The International Journal of Educational Management (1)
1997.7 onwards (2)
搜尋結果: 顯示第 1-2 筆資料 (共 2 筆)
排序: 建檔日期 出版年份 最相關
選擇紀錄 1-2
已選 0 筆紀錄
匯出
1. The development of school autonomy and accountability in Hong Kong
作者: Ko, James; Cheng, Yin Cheong; Lee, Theodore Tai Hoi
文件類型: 期刊論文
來源資料: The International Journal of Educational Management, 30(7), 1207-1230, 2016
出版年: 2016
出版者: Emerald Group Publishing, Limited
顯示摘要
Purpose The purpose of this paper is to trace the development of school autonomy and accountability and related multiple changes and impacts in key areas of school education in Hong Kong since implementing school-based management (SBM) from 1990s. Design/methodology/approach To explore the evolution and the uniqueness of autonomy and accountability in the Hong Kong school system, the paper begins with an historical account, followed by an evaluation of the effects of SBM as shown in policy documents, local research, international reviews and illustrative findings from a case study. The local and international implications of SBM for research and practice are then discussed. Findings This paper shows the links between school autonomy and accountability by exploring the potential effects of both of these factors on educational management and student achievement, which are increasingly emphasised in educational policies. The investigation shows that the assumed links and effects are not always consistent or empirically supported. The positive effects that school autonomy has on school governance and management, teachers' work, school-based curriculums and student learning are all significant when there is also strong leadership, comprehensive continuous professional development and a positive, collaborative school climate. These key elements work alongside school autonomy to facilitate positive change. Research limitations/implications School autonomy and accountability should be viewed as necessary, but not sufficient, conditions for school improvement and development. Further characterisation of the processes happening in schools is needed to explore the different realisations of school autonomy and accountability. Originality/value This investigation of school autonomy and accountability in Hong Kong provides the international audience with a deeper understanding of the dynamics involved in the development of SBM.
2. Review of research on educational leadership and management in Hong Kong, 1995–2012: Topographical analysis of an emergent knowledge base
作者: Hallinger, Philip; Lee, Theodore Tai Hoi; Szeto, Elson
來源資料: Leadership & Policy in Schools, 12(3), 256-281, 2013
出版者: Taylor & Francis
A recent study of scholarship on educational leadership and management in East Asia identified a rapidly growing corpus of published studies focusing on educational leadership and management in Hong Kong. This article undertakes a "topographical analysis" of this literature with the aim of describing the nature of topics and research methods employed over the past decade. The authors analyze the body of articles published in a "core" set of eight educational leadership and management journals between 1995 and 2012. The descriptive study offers insights into the nature of this emergent literature from a single non-Western society.
[Copyright of Leadership & Policy in Schools is the property of Taylor & Francis. Full article may be available at the publisher's website:
http://dx.doi.org/10.1080/15700763.2013.826809]
教大圖書館 關於我們 意見及建議


text:
Blue Jackets Management Caught Off Guard by Slow Start
By Josh Beneteau April 14th, 2016
When the Columbus Blue Jackets opened the season with eight straight loses, the team's management was stunned and not sure what to do. That was the message general manager Jarmo Kekalainen and president of hockey operations John Davidson left fans with in their final press conference of the season on Monday.
"I thought our team going into this season was a playoff team," Davidson said. "There's a lot of 'what could have been' type of thing. We wasted an opportunity, and that's factual."
It is fair to say the roster should have grown leaps and bounds. The team has had a lot of high draft picks in recent years, with a proven goalie in Sergei Bobrovsky backstopping them. Players like Boone Jenner and Ryan Johansen were supposed to be given a boost by a trade for Brandon Saad that was supposed to spark the team's offence. And another year of Ryan Murray and David Savard on defence should have been nothing but positive.
On top of that, the team had closed the previous season winning 17 of its final 21 games, including a 13 game winning streak. The team still missed the final wild card spot by nine points, but there was certainly reason for optimism.
Then the 2015-16 season started in the worst possible way. After losing the first seven games of the season, the Blue Jackets fired coach Todd Richards and brought in John Torterella. The losing continued and Columbus finished 34-40-4-4, good for second last in the Eastern Conference.
"It's funny with athletes, something happens and it's tough to get out of it," Torterella said Monday when reflecting on the slow start. "I thought at times that we were on the right road but we're still inconsistent and it comes down to the mental part of the game. We need to fix that."
(Amy Irvin / The Hockey Writers)
Offence Isn't The Problem
Scoring was surprisingly not the problem this season for the Blue Jackets. The team saw lower production from Johansen, who only contributed six goals before he was traded for defenceman Seth Jones, and captain Nick Foligno, who saw his goal totals drop from 30 a year before to just 12 this season. Nevertheless, the team was still 10th in the NHL in goals per game, averaging 2.25 when playing even strength according to Hockey Analytics.com.
In the end of year press conference, Kekalainen admitted "we need to get better at the centre ice position," after trading Johansen but added "I don't think offence is our team's problem."
Where the team does need to improve is defence, where it was ranked 27th in goals against per game with 2.44 at five on five. Part of that was Bobrovsky only able to make 37 starts in net due to various groin problems, but the team still needs to be better in front of him.
"We have to keep the puck out of the net and we have to defend better," Kekalainen said. "We have to be better as a group… there are a lot of areas for us to improve."
Kekalainen mentioned that he will be going out on the road to scout within the week. But every other team wants to improve on defence, forcing Columbus to possible lose another forward for a defenceman.
Outlook For The Future
The Blue Jackets do have some young players coming down the pipe that both Davidson and Kekalainen are excited about. Davidson specifically mentioned Jones and Zach Werenski as two defencemen that make Davidson "feel stronger about our backend."
But going into this June's draft, Columbus only has five draft picks, with the team not picking in the fourth and fifth round.
"We are a draft and development organization," Davidson said Monday. "Drafting is the life blood of our franchise. This is huge for us."
But until the team bites the bullet and trades the veteran players for more draft picks, it will be hard for them to go through with that plan. When asked what specifically needs to be done, Davidson refused to name names.
"It's hard for me to sit here right now and say this guy has to go or this guy has to stay," Davidson said. "We're still going to evolve as a franchise… but we're going to have the same game plan we've always had and… hopefully get better as a team."
The only thing Columbus fans can really count on is the team will have a high draft pick in June. Other than that, management wasn't clear about the future of the roster and if they really are capable of the restructure required to turn the Blue Jackets around.
While a big offseason is still on the way, there is not a lot of hope in Columbus right now. Management tried its best to say all the right things Monday, but they have a lot to do in order to backup their words.
Jarmo Kekalainen


ABOARD THE USS NIMITZ (AP) -- High above the Persian Gulf, an Iranian drone crosses the path of American fighter jets lining up to land on the USS Nimitz.
So far, it hasn't come to that. But the drones have become an even more dangerous security risk as U.S. carriers in the Persian Gulf like the Nimitz play a key role in Iraq and Syria. Planes from these ships are regularly flying to each country to bomb Islamic State militants and other targets. From the Nimitz alone, U.S. fighter jets flew missions resulting in at least 350 bombs being dropped on IS militants just in the last month.


text:
Eric Palm
Deputy Lab Director, National High Magnetic Field Laboratory
Dr. Eric Palm received both his MA and PhD in Physics from Texas A&M University, where he won the Squire Fellowship. His thesis involved studying quantum interference effects in unique semiconductor devices at low temperatures in strong magnetic fields. He had previously received a BA in Physics from Rice University and taught physics at a high school in Houston, TX. After completing his PhD, Dr. Palm received a National Research Council postdoctoral fellowship to study the quantum Hall effect at the National Institute of Standards and Technology in Gaithersburg, MD. When the National High Magnetic Field Laboratory opened its doors in 1993 he was one of the first scientists hired in the DC Field Facility at the MagLab. He served as the Millikelvin Facility Chief in charge of creating experimental apparatus capable of cooling a sample very close to absolute zero while in the highest magnetic fields in the world. In late 2007 Dr. Palm was selected to be the Director of the DC Field Facility, the largest of the facilities at the MagLab. In 2012 he became the Deputy Laboratory Director of the MagLab working in partnership with the Director to ensure that the lab is performing at the highest level possible. In addition, Dr. Palm has over 70 publications and has research interests in a variety of subjects including unconventional superconductivity and highly correlated electron systems.
User Program Practices
Thursday, April 4, 2019 – 9:10 am
A Panel of NSF Major Facilities will provide an overview of their User Program including their community, services, and challenges. They will discuss performance measurements and how these are aligned with the facility mission and user satisfaction and outreach. Each Facility will make a presentation and then the Panel will answer questions from the Workshop participants.


text:
The Life After Death 25th Anniversary Super Deluxe Boxed Set consists of 8-LPs and a commemorative booklet featuring rare photos from the album cover shoot, liner notes by Sheldon Pearce, and exclusive reflections from members of the team who worked on the original album release. In addition to the original album, it includes the Hypnotize 12", Mo Money Mo Problems 12", Sky's The Limit 12", and Nasty Boy 12".
Upon its 1997 release, Life After Death debuted at #1 on the Billboard Top 200. It was the first album to feature two back-to-back posthumous #1 singles, "Hypnotize" and "Mo Money Mo Problems." The album received a GRAMMYr nomination in the category of "Best Rap Album." "Hypnotize" earned a GRAMMYr nomination for "Best Rap Solo Performance," and "Mo Money Mo Problems" was nominated for "Best Rap Performance by a Duo or Group." Among dozens of lists and retrospectives, Rolling Stone touted Life After Death among its coveted "The 500 Greatest Albums of All Time." The RIAA has awarded the album a Diamond Certification for more than 5 million copies sold of the double-LP.
NOTORIOUS B.I.G. / LIFE AFTER DEATH (25TH ANNIVERSARY EDITION) EXPLICIT
https://licoricepizzarecords.com 603497841837
Label: BAD BOY
Life After Death (25th Anniversary Edition) (Box)
Artist: Notorious B.I.G.
New: Available $174.98 $169.43 ON SALE
$ 169.43 Buy
Vinyl - Colored Vinyl
1. Life After Death Intro
2. Somebody's Gotta Die
3. Hypnotize
4. Kick in the Door
5. Fuck You Tonight
6. Last Day
7. I Love the Dough
8. What's Beef?
9. B.I.G. Interlude
10. Mo Money Mo Problems
11. Niggas Bleed
12. I Gotta Story to Tell
13. Notorious Thugs
14. Miss U
15. Another
16. Going Back to Cali
17. Ten Crack Commandments
18. Playa Hater
19. Nasty Boy
20. Sky's the Limit
21. The World Is Filled
22. My Downfall
23. Long Kiss Goodnight
24. You're Nobody (Til Somebody Kills You)


text:
(estilizado como ZEXCS) é um estúdio japonês de animação situado em Koganei, Tóquio, no Japão. Foi fundado a 23 de janeiro de 1998 pelo antigo produtor da J.C.Staff, Tomoko Kawasaki, e tornou-se conhecido por várias produções como Mai-HiME, Sister Princess e Lady Jewelpet. Zexcs também é conhecido por seu trabalho de cooperação com o estúdio de animação Feel.

Animes produzidos

Canvas 2: Niji Iro no Sketch
Happy World!Lady Jewelpet''

Ligações externas

Estúdios de animação do Japão
Empresas fundadas em 1998


Yes, I know they are loud, so I would be concerned about the neighbors. But we also have foxes nearby….
Definitely a very good reason to keep them in a nice strong coop. Raccoons are another concern. They may look cute but just one or two of them can wipe out an entire flock.


We at Rainbow Books are excited to be offering children books they can identify with and enjoy. Whether children are read to or read the book themselves, our books contain some of the most charming and entertaining characters, kids will not want the story to end. Even adults are eager to find out what happens next.
So, come along on one of our adventures. We dare ya!
Free Shipping on Everything! No minimum. No code needed. Valid now through October 31st!
Order your copy of The Rainbow Files #1 today!


Join us as the region's most influential business owners, executives, and emerging business leaders come together for the Circuit of Success Summit. Hosted by Visionary Wealth Advisors, this event will inspire guests to reach their highest leadership potential. We look forward to seeing you there!


FLAMES Science Verification observations successfully took place on 24 Jan 24 - 3 Feb, 2003. More than 5200 spectra have been collected!
May 1, 2003: The few remaining frames (taken after the official FLAMES SV run) have now been released.
Only accessible to SV Team members.
Important Notice (Feb 2003): All FLAMES users (including members of the FLAMES SV Team) should carefully follow FLAMES-related instructions provided on the Phase2 Proposal Preparation web page. Both software tools and user-manuals have been revised for Period 71 observations.
README files submitted by each PI.
Objective: To derive details of the chemical enrichment of the LMC by determining accurate abundances of different stellar populations: RGB, Clump and LPV stars.
Objective: To obtain the velocity of all catalogued PNe (785, cf Hui et al. 1993), at a wavelength accuracy <10km/s using the brightest line, [O III] 5007A. This will allow the systemic velocity of each PN to be determined and will become the final data-set for mass modelling of the only large elliptical galaxy for which this massive study can be attempted. Catalogued globular clusters will also be included in each field for comparison with their kinematics and for determination of metallicity.
Objective: To determine the internal velocity dispersion in each of the HST resolved globular clusters, with some spatial kinematical information in the brightest ones, from high-resolution spectra at SNR ranging from 20 to 5 and low resolution with SNR 50 to 14. Using the existing surface brightness profiles, we derive the Mass/Luminosity ratios. One or two bundles could be devoted to fainter objects in order to check the possibility to extend such observation to closest clusters of galaxies.
Objective: To test mass outflow, hence mass loss scenarios, by measuring shifts of the main diagnostic (CaII-K3, NaD and H-alpha core line profiles) in ~100 brightest red giant stars down from the RGB tip in NGC 2808.
Objective: to make a direct measure of the product between the stellar mass-to-light ratio and of the thickness of the disk from the stellar vertical velocity dispersion (i.e. the line-of-sight dispersion of a face-on late-type dwarf). 5 IFUs to be allocated at a radius of 1 scale length and 10 at a radius of 2 scale lengths. Selection of target is based on: late type, close to face-on, and not barred. It is less massive than the Milky Way, so a velocity resolution of the order of 10-20 km/s is needed.
Objective: To determine the Vsini distribution for a large number (120) of low-mass stars in the ONC in order to properly study the early angular momentum evolution of low-mass stars. The Vsini, combined with already available rotational periods, will also yield the minimum radius and possibly the radii distribution, hence an independent measure of this population age.
Objective: To accurately determine the velocity dispersion and infer some constraint on the Ellipsoid of velocity dispersions in the central part of the galaxy. The set of high resolution IFUobservations will also permit to evaluate the accuracy of low S/N observations (single spectrum) compared to che co-added spectra results.


text:
'use strict';

let expect = require('chai').expect;
let should = require('chai').should();
let init = require('./init-test'),
    surveyjs = init.surveyjs,
    feedbackjs = init.feedbackjs;

describe("Interface to add one new feedback model into data store", () => {
  let event = {
    surveyid: "Fake surveyid",
    clientid: "1st clientid",
    feedback: "1st feedback"
  };
  describe("#addOneFeedback successfully", () => {
    describe("When adding one new feedback model with complete and normal parameters", () => {
      it("should response successfully", done => {

        feedbackjs.addOneFeedback(event).then(response => {
          expect(response).to.not.be.null;
          response.should.have.all.keys('datetime');
          response.datetime.should.be.above(0);
          done();
        });
      });
    });
  });
  describe("#addOneFeedback with error", () => {
    // missing parameter(s)
    let missingParams = [
      { // missing one parameter
        desc: "with missing event.feedback",
        event: {
          clientid: event.clientid,
          surveyid: event.surveyid
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing one parameter
        desc: "with missing event.surveyid",
        event: {
          clientid: event.clientid,
          feedback: event.feedback
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing one parameter
        desc: "with missing event.clientid",
        event: {
          surveyid: event.surveyid,
          feedback: event.feedback
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing two parameters
        desc: "with missing event.clientid and event.feedback",
        event: {
          surveyid: event.surveyid
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing two parameters
        desc: "with missing event.surveyid and event.feedback",
        event: {
          clientid: event.clientid
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing two parameters
        desc: "with missing event.surveyid and event.clientid",
        event: {
          feedback: event.feedback
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing all parameters
        desc: "with missing all parameters",
        event: {},
        expect: /Error: 400 Bad Request/
      },
      {
        desc: "with wrong table",
        event: {
          clientid: event.clientid,
          surveyid: event.surveyid,
          feedback: event.feedback,
        },
        expect: /Error: 400 Bad Request/
      }
    ];

    missingParams.forEach(test => {
      describe("When adding one new feedback model " + test.desc, () => {
        it("should response error", done => {
          if (test.desc === "with wrong table") process.env.SERVERLESS_FEEDBACKTABLE = "XXX";
          feedbackjs.addOneFeedback(test.event).catch(error => {
            expect(error).to.not.be.null;
            error.should.match(RegExp(test.expect));
            done();
          });
        });
      });
    });

    after("Set SERVERLESS_FEEDBACKTABLE feedbacktable", done => {
      process.env.SERVERLESS_FEEDBACKTABLE = "feedbacktable";
      done();
    });
  });
});

/*
[
  {surveyid: "Fake surveyid", clientid: "1st clientid" ...}
]
*/

describe("Interface to get one feedback model from data store", () => {
  let event = {
    surveyid: "Fake surveyid",
    clientid: "2nd clientid",
    feedback: "2nd feedback",
  };
  before("Insert one dummy record", done => {
    feedbackjs.addOneFeedback(event).then(() => {
      done();
    });
  });
  describe("#getOneFeedback successfully", () => {
    describe("When getting exist feedback model with complete and normal parameters", () => {
      it("should response successfully", done => {
        feedbackjs.getOneFeedback(event).then(response => {
          expect(response).to.not.be.null;
          response.should.have.all.keys(['clientid', 'surveyid', 'feedback', 'datetime']);
          response.clientid.should.have.string(event.clientid);
          response.surveyid.should.have.string(event.surveyid);
          response.feedback.should.have.string(event.feedback);
          response.datetime.should.be.above(0);
          done();
        });
      });
    });
  });
  describe("#getOneFeedback with error", () => {
    let missingParams = [
      { // missing one parameter
        desc: "with not match any event.clientid",
        event: {
          clientid: "Not match",
          surveyid: event.surveyid
        },
        expect: /Error: 404 Not Found/
      },
      { // missing one parameter
        desc: "with not match any event.surveyid",
        event: {
          clientid: event.clientid,
          surveyid: "Not match"
        },
        expect: /Error: 404 Not Found/
      },
      { // missing parameter(s)
        desc: "with missing event.surveyid",
        event: {
          clientid: event.clientid
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing parameter(s)
        desc: "with missing event.clientid",
        event: {
          surveyid: event.surveyid
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing all parameters
        desc: "with missing all parameters",
        event: {},
        expect: /Error: 400 Bad Request/
      },
      {
        desc: "with wrong table",
        event: {
          clientid: event.clientid,
          surveyid: "Not match",
        },
        expect: /Error: 400 Bad Request/
      }
    ];

    missingParams.forEach(test => {
      describe("When getting one feedback model " + test.desc, () => {
        it("should response error", done => {
          if (test.desc === "with wrong table") process.env.SERVERLESS_FEEDBACKTABLE = "XXX";
          feedbackjs.getOneFeedback(test.event).catch(error => {
            expect(error).to.not.be.null;
            error.should.match(RegExp(test.expect));
            done();
          });
        });
      });
    });

    after("Set SERVERLESS_FEEDBACKTABLE feedbacktable", done => {
      process.env.SERVERLESS_FEEDBACKTABLE = "feedbacktable";
      done();
    });
  });
});

/*
[
  {surveyid: "Fake surveyid", clientid: "1st clientid" ...},
  {surveyid: "Fake surveyid", clientid: "2nd clientid" ...}
]
*/

describe("Interface to get total feedback number in a survey from data store", () => {
  let surveyid = "Fake surveyid";
  describe("#countFeedbacks successfully", () => {
    describe("When getting total feedback number in a survey with complete and normal parameters", () => {
      it("should response successfully", done => {
        let event = {
          surveyid: surveyid,
        };
        feedbackjs.countFeedbacks(event).then(response => {
          expect(response).to.not.be.null;
          response.should.have.all.keys(['ScannedCount', 'Count']);
          response.ScannedCount.should.eql(2);
          response.Count.should.eql(2);
          done();
        });
      });
    });
  });
  describe("#countFeedbacks with error", () => {
    let missingParams = [
      {
        desc: "with missing all parameters",
        event: {},
        expect: /Error: 400 Bad Request/
      },
      {
        desc: "with wrong table",
        event: {surveyid: "Not found"},
        expect: /Error: 400 Bad Request/
      }
    ];

    missingParams.forEach(test => {
      describe("When getting total feedback number in a survey " + test.desc, () => {
        it("should response error", done => {
          if (test.desc === "with wrong table") process.env.SERVERLESS_FEEDBACKTABLE = "XXX";
          feedbackjs.countFeedbacks(test.event).catch(error => {
            expect(error).to.not.be.null;
            error.should.match(RegExp(test.expect));
            done();
          });
        });
      });
    });

    after("Set SERVERLESS_FEEDBACKTABLE feedbacktable", done => {
      process.env.SERVERLESS_FEEDBACKTABLE = "feedbacktable";
      done();
    });
  });
});

/*
[
  {surveyid: "Fake surveyid", clientid: "1st clientid" ...},
  {surveyid: "Fake surveyid", clientid: "2nd clientid" ...}
]
*/

describe("Interface to get list feedback model from data store", () => {
  let surveyid = "Fake surveyid";
  describe("#listFeedbacks successfully", () => {
    describe("When getting exist feedback model with complete and normal parameters", () => {
      it("should response successfully", done => {
        let event = {
          surveyid: surveyid,
        };
        feedbackjs.listFeedbacks(event).then(response => {
          expect(response).to.not.be.null;
          response.should.have.keys('feedbacks');
          response.feedbacks.length.should.equal(2); // There are 2 feedback model in above test case.
          response.feedbacks.map(obj => {
            obj.should.have.keys(['clientid', 'surveyid', 'datetime']);
            obj.clientid.should.exist;
            obj.surveyid.should.exist;
            obj.datetime.should.exist;
          });
          done();
        });
      });
    });
    describe("When getting exist feedback model with startKey parameters", () => {
      it("should response successfully", done => {
        let event = {
          surveyid: surveyid,
          limitTesting: true,
        };
        const limitTestCase = event => {
          feedbackjs.listFeedbacks(event).then(response => {
            if (typeof response.LastEvaluatedKey !== "undefined") {
              expect(response).to.not.be.null;
              response.should.have.keys(['feedbacks', 'LastEvaluatedKey']);
              response.feedbacks.length.should.equal(1); // There is one feedback model because setting limit is 1.
              response.feedbacks.map(obj => {
                obj.should.have.keys(['clientid', 'surveyid', 'datetime']);
                obj.clientid.should.exist;
                obj.surveyid.should.exist;
                obj.datetime.should.exist;
              });

              // recursive
              event.startKey = response.LastEvaluatedKey;
              limitTestCase(event);
            } else {
              done();
            }
          });
        };
        limitTestCase(event);
      });
    });
  });
  describe("#listFeedbacks with error", () => {
    let missingParams = [
      { // missing all parameters
        desc: "with missing all parameters",
        event: {},
        expect: /Error: 400 Bad Request/
      },
      {
        desc: "with wrong table",
        event: {surveyid: "Not found"},
        expect: /Error: 400 Bad Request/
      }
    ];

    missingParams.forEach(test => {
      describe("When getting list feedback model " + test.desc, () => {
        it("should response error", done => {
          if (test.desc === "with wrong table") process.env.SERVERLESS_FEEDBACKTABLE = "XXX";
          feedbackjs.listFeedbacks(test.event).catch(error => {
            expect(error).to.not.be.null;
            error.should.match(RegExp(test.expect));
            done();
          });
        });
      });
    });

    after("Set SERVERLESS_FEEDBACKTABLE feedbacktable", done => {
      process.env.SERVERLESS_FEEDBACKTABLE = "feedbacktable";
      done();
    });
  });
});

/*
[
  {surveyid: "Fake surveyid", clientid: "1st clientid" ...},
  {surveyid: "Fake surveyid", clientid: "2nd clientid" ...}
]
*/

describe("Interface to update one feedback model from data store", () => {
  let event = {
    surveyid: "Fake surveyid",
    clientid: "1st clientid",
    feedback: "1st feedback(Modified)",
  };
  describe("#updateOneFeedback successfully", () => {
    describe("When updating one exist feedback model with complete and normal parameters", () => {
      it("should response successfully", done => {
        feedbackjs.updateOneFeedback(event).then(response => {
          expect(response).to.not.be.null;
          response.should.have.all.keys(['feedback', 'datetime']);
          response.feedback.should.have.string(event.feedback);
          done();
        });
      });
    });
  });
  describe("#updateOneFeedback with error", () => {
    let errorParams = [
      {
        desc: "with non exist Feedback data",
        event: {
          clientid: "not found",
          feedback: event.feedback,
          surveyid: "not found"
        },
        expect: /Error: 404 Not Found/
      },
      { // missing one parameter
        desc: "with missing event.feedback",
        event: {
          clientid: event.clientid,
          surveyid: event.surveyid
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing one parameter
        desc: "with missing event.surveyid",
        event: {
          clientid: event.clientid,
          feedback: event.feedback
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing one parameter
        desc: "with missing event.clientid",
        event: {
          surveyid: event.surveyid,
          feedback: event.feedback
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing two parameters
        desc: "with missing event.clientid and event.feedback",
        event: {
          surveyid: event.surveyid
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing two parameters
        desc: "with missing event.surveyid and event.feedback",
        event: {
          clientid: event.clientid
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing two parameters
        desc: "with missing event.surveyid and event.clientid",
        event: {
          feedback: event.feedback
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing all parameters
        desc: "with missing all parameters",
        event: {},
        expect: /Error: 400 Bad Request/
      },
      {
        desc: "with wrong table",
        event: {
          clientid: event.clientid,
          surveyid: event.surveyid,
          feedback: event.feedback,
        },
        expect: /Error: 400 Bad Request/
      }
    ];
    errorParams.forEach(test => {
      describe("When updating one feedback model " + test.desc, () => {
        it("should response error", done => {
          if (test.desc === "with wrong table") process.env.SERVERLESS_FEEDBACKTABLE = "XXX";
          feedbackjs.updateOneFeedback(test.event).catch(error => {
            expect(error).to.not.be.null;
            error.should.match(RegExp(test.expect));
            done();
          });
        });
      });
    });

    after("Set SERVERLESS_FEEDBACKTABLE feedbacktable", done => {
      process.env.SERVERLESS_FEEDBACKTABLE = "feedbacktable";
      done();
    });
  });
});

/*
[
  {surveyid: "Fake surveyid", clientid: "1st clientid" ...},
  {surveyid: "Fake surveyid", clientid: "2nd clientid" ...}
]
*/

describe("Interface to delete feedback model from data store", () => {
  describe("#deleteOneFeedback successfully", () => {
    describe("When deleting exist feedback model with complete and normal parameters", () => {
      it("should response successfully", done => {
        let event = {
          surveyid: "Fake surveyid",
          clientid: "2nd clientid",
        };
        feedbackjs.deleteFeedbacks(event).then(response => {
          expect(response).to.not.be.null;
          done();
        });
      });
    });
    /*
    [
      {surveyid: "Fake surveyid", clientid: "1st clientid" ...}
    ]
    */
    describe("When deleting non-exist feedback model with complete and normal parameters", () => {
      it("should response successfully", done => {
        let event = {
          clientid: 'non-exist clientid',
          surveyid: 'non-exist surveyid',
        };
        feedbackjs.deleteFeedbacks(event).then(response => {
          expect(response).to.not.be.null;
          done();
        });
      });
    });
  });
  describe("#deleteAllFeedbacks successfully", () => {
    before("Insert 30 dummy feebacks", done => {
      let success = 0
      for (let i = 0; i < 30; i++) {
        let event = {
          surveyid: "Fake surveyid",
          clientid: "clientid " + i,
          feedback: "feedback model",
        };
        feedbackjs.addOneFeedback(event).then(response => {
          expect(response).to.not.be.null;
          response.should.have.all.keys('datetime');
          response.datetime.should.be.above(0);
          success += 1;
          if (success === 30) done();
        });
      }
    });
    /*
    [
      {surveyid: "Fake surveyid", clientid: "1st clientid" ...}
      ...
      30 record added
      ...
    ]
    */
    describe("When deleting exist feedbacks with a surveyid", () => {
      it("should response successfully", done => {
        let event = {
          surveyid: "Fake surveyid",
        };
        feedbackjs.listFeedbacks(event).then(response => {
          expect(response).to.not.be.null;
          response.should.have.keys('feedbacks');
          response.feedbacks.length.should.equal(31); // There are 31 feedbacks model in above test case. (include previous added)
          return feedbackjs.deleteFeedbacks(event);
        }).then(response => {
          expect(response).to.not.be.null;
          return feedbackjs.listFeedbacks(event);
        }).then(response => {
          expect(response).to.not.be.null;
          response.should.have.keys('feedbacks');
          response.feedbacks.length.should.equal(0); // There are 0 feedbacks model in above test case.
          done();
        });
      });
    });
    describe("When deleting exist feedbacks with a surveyid but without any feedback record", () => {
      it("should response successfully", done => {
        let event = {
          surveyid: "Fake surveyid",
        };
        feedbackjs.deleteFeedbacks(event).then(response => {
          expect(response).to.not.be.null;
          done();
        });
      });
    });
    describe("When deleting non-exist feedbacks with a non-exist surveyid", () => {
      it("should response successfully", done => {
        let event = {
          surveyid: 'non-exist surveyid',
        };
        feedbackjs.deleteFeedbacks(event).then(response => {
          expect(response).to.not.be.null;
          done();
        });
      });
    });
  });
  describe("#deleteOneFeedback with error", () => {
    let missingParams = [
      { // missing one parameter
        desc: "with missing event.surveyid",
        event: {
          clientid: "1st clientid",
        },
        expect: /Error: 400 Bad Request/
      },
      { // missing all parameters
        desc: "with missing all parameters",
        event: {},
        expect: /Error: 400 Bad Request/
      },
      {
        desc: "with wrong table",
        event: {
          clientid: "clientid",
          surveyid: "surveyid",
        },
        expect: /Error: 400 Bad Request/
      },
      {
        desc: "with wrong table",
        event: {
          surveyid: "surveyid",
        },
        expect: /Error: 400 Bad Request/
      }
    ];

    missingParams.forEach(test => {
      describe("When deleting one feedback model " + test.desc, () => {
        it("should response error", done => {
          if (test.desc === "with wrong table") process.env.SERVERLESS_FEEDBACKTABLE = "XXX";
          feedbackjs.deleteFeedbacks(test.event).catch(error => {
            expect(error).to.not.be.null;
            error.should.match(RegExp(test.expect));
            done();
          });
        });
      });
    });

    after("Set SERVERLESS_FEEDBACKTABLE feedbacktable", done => {
      process.env.SERVERLESS_FEEDBACKTABLE = "feedbacktable";
      done();
    });
  });
});

describe("Interface to get one feedback CSV report from data store", () => {
  let accountid = "this is dummy accountid";
  let surveyid = "this is dummy surveyid";
  let subject = "this is dummy subject";
  let surveyContent = {
    "content": [
      {
        "page": 1,
        "description": "Untitle Page",
        "question": [
          {
            "id": "1APPGR9Q9J2CNNDTSVUXE",
            "order": 1,
            "data": [
              {
                "value": "1",
                "label": "Radio option 1"
              },
              {
                "value": "1APPGT35C1MY0O4LOL3UH",
                "label": "Radio option 2"
              },
              {
                "value": "1APPGTHVAZJAWBVN8H1JJ",
                "label": "Radio option 3"
              },
              {
                "input": "Please input your options.",
                "value": "1APPGTNPCICS772YVWOMK",
                "label": "Radio option 4"
              }
            ],
            "label": "Radio question label",
            "type": "radio",
            "required": true
          },
          {
            "id": "1APPGU85P3Q5O1867TTU1",
            "order": 2,
            "data": [
              {
                "value": "1",
                "label": "Checkbox option 1"
              },
              {
                "value": "1APPGUSH054A3SE6KSBAA",
                "label": "Checkbox option 2"
              },
              {
                "value": "1APPGV16961XPC85S6NNA",
                "label": "Checkbox option 3"
              },
              {
                "value": "1APPGV6DJ5TMJ3AAB4IXO",
                "label": "Checkbox option 4"
              },
              {
                "input": "Please input here.",
                "value": "1APPGVH3AKIG3DI5D63OY",
                "label": "Checkbo option 5 with input"
              }
            ],
            "label": "Checkbox question label",
            "type": "checkbox",
            "required": true
          }
        ]
      },
      {
        "page": 2,
        "description": "Untitle Page",
        "question": [
          {
            "id": "1APPH9K1JQE7N9HUM53F9",
            "input": "Tell me the reason.",
            "order": 3,
            "data": [
              {
                "value": "1",
                "label": "Scale 1"
              },
              {
                "value": "1APPHA1QGA80ASBNCAXZ7",
                "label": "Scale 2"
              },
              {
                "value": "1APPHA4N3N3F0H1T0RECW",
                "label": "Scale 3"
              },
              {
                "value": "1APPHA8G4K8ZL5EMS5DSX",
                "label": "Scale 4"
              },
              {
                "value": "1APPHABS4J29LGO58AAFW",
                "label": "Scale 5"
              }
            ],
            "label": "Rating question label",
            "type": "rating",
            "required": true
          }
        ]
      }
    ],
    "thankyou": {
      "description": "Thanks for sharing your feedback with Trend Micro.",
      "privacy": {
        "input": "Please enter your email address.",
        "terms": "Yes, Trend Micro can reach me at this address: ",
        "label": "If Trend Micro has a follow-up survey on the Email Scan, would you like to participate?"
      }
    }
  };

  before("Insert one dummy survey record", done => {
    let event = {
      accountid: accountid,
      subject: subject,
      survey: surveyContent,
    };
    surveyjs.addOneSurvey(event).then(data => {
      surveyid = data.surveyid;
      let feedbackEvent = {
        surveyid: data.surveyid,
        clientid: "this is fake clientid",
        feedback: {
          "Q1": {
            "data": [
              {
                "value": "1",
                "label": "Radio option 1"
              }
            ],
            "label": "Radio question label",
            "type": "radio"
          },
          "Q2": {
            "data": [
              {
                "value": "1",
                "label": "Checkbox option 1"
              },
              {
                "value": "1APPGUSH054A3SE6KSBAA",
                "label": "Checkbox option 2"
              },
              {
                "value": "1APPGV16961XPC85S6NNA",
                "label": "Checkbox option 3"
              },
              {
                "value": "1APPGV6DJ5TMJ3AAB4IXO",
                "label": "Checkbox option 4"
              },
              {
                "input": "Checkbox input",
                "value": "1APPGVH3AKIG3DI5D63OY",
                "label": "Checkbo option 5 with input"
              }
            ],
            "label": "Checkbox question label",
            "type": "checkbox"
          },
          "Q3": {
            "data": [
              {
                "input": "Rating input",
                "value": "1",
                "label": "Scale 1"
              }
            ],
            "label": "Rating question label",
            "type": "rating"
          },
          "thankyou": {
            "privacy": {
              "input": "Thankyoupage@trend.com.tw"
            }
          }
        }
      };
      let feedbackEvent2 = {
        surveyid: data.surveyid,
        clientid: "this is fake clientid1",
        feedback: {
          "Q1": {
            "data": [
              {
                "value": "1",
                "label": "Radio option 1"
              }
            ],
            "label": "Radio question label",
            "type": "radio"
          },
          "Q2": {
            "data": [
              {
                "value": "1",
                "label": "Checkbox option 1"
              },
              {
                "value": "1APPGUSH054A3SE6KSBAA",
                "label": "Checkbox option 2"
              },
              {
                "value": "1APPGV16961XPC85S6NNA",
                "label": "Checkbox option 3"
              },
              {
                "value": "1APPGV6DJ5TMJ3AAB4IXO",
                "label": "Checkbox option 4"
              },
              {
                "input": "Checkbox input",
                "value": "1APPGVH3AKIG3DI5D63OY",
                "label": "Checkbo option 5 with input"
              }
            ],
            "label": "Checkbox question label",
            "type": "checkbox"
          },
          "Q3": {
            "data": [
              {
                "input": "Rating input",
                "value": "1",
                "label": "Scale 1"
              }
            ],
            "label": "Rating question label",
            "type": "rating"
          },
          "thankyou": {
            "privacy": {
              "input": "Thankyoupage@trend.com.tw"
            }
          }
        }
      };
      Promise.all([feedbackjs.addOneFeedback(feedbackEvent), feedbackjs.addOneFeedback(feedbackEvent2)]).then(() => {
        done();
      });
    }).catch(err => {
      throw err;
    });
  });

  describe("#reportFeedbacks successfully", () => {
    describe("When getting exist feedback CSV report with complete and normal parameters", () => {
      it("should response successfully", done => {
        let event = {
          surveyid: surveyid,
          accountid: accountid,
        };
        feedbackjs.reportFeedbacks(event).then(response => {
          expect(response).to.not.be.null;
          response.should.have.all.keys(['accountid', 'surveyid', 'subject', 'survey', 'l10n', 'data', 'datetime']);
          response.accountid.should.have.string(accountid);
          response.surveyid.should.have.string(surveyid);
          response.subject.should.have.string(subject);
          response.data.length.should.be.above(0);
          response.datetime.should.be.above(0);
          done();
        });
      });
    });

    describe("When getting exist feedback CSV report when feedback data exceed 1MB.", () => {
      it("should response successfully", done => {
        let event = {
          surveyid: surveyid,
          accountid: accountid,
          unitTest: true,
        };
        feedbackjs.reportFeedbacks(event).then(response => {
          expect(response).to.not.be.null;
          response.should.have.all.keys(['accountid', 'surveyid', 'subject', 'survey', 'l10n', 'data', 'datetime']);
          response.accountid.should.have.string(accountid);
          response.surveyid.should.have.string(surveyid);
          response.subject.should.have.string(subject);
          response.data.length.should.be.above(0);
          response.datetime.should.be.above(0);
          done();
        });
      });
    });
  });

  describe("#reportFeedbacks with error", () => {
    let missingParams = [
      {
        desc: "with not match any event.accountid",
        event: {
          accountid: "Not match",
          surveyid: "this is fake survey id"
        },
        expect: /Error: 404 Not Found/
      },
      {
        desc: "with not match any event.surveyid",
        event: {
          accountid: "this is dummy accountid",
          surveyid: "Not match"
        },
        expect: /Error: 404 Not Found/
      },
      {
        desc: "with missing event.surveyid",
        event: {
          accountid: "this is fake accountid"
        },
        expect: /Error: 400 Bad Request/
      },
      {
        desc: "with missing event.accountid",
        event: {
          surveyid: "this is fake survey id"
        },
        expect: /Error: 400 Bad Request/
      },
      {
        desc: "with missing all parameters",
        event: {},
        expect: /Error: 400 Bad Request/
      },
      {
        desc: "with wrong table",
        event: {
          surveyid: surveyid,
          accountid: accountid,
        },
        expect: /Error: 400 Bad Request/
      }
    ];

    missingParams.forEach(test => {
      describe("When getting one feedback CSV report " + test.desc, () => {
        it("should response error", done => {
          if (test.desc === "with wrong table") {
            test.event.surveyid = surveyid;
            process.env.SERVERLESS_FEEDBACKTABLE = "XXX";
          }
          feedbackjs.reportFeedbacks(test.event).catch(error => {
            expect(error).to.not.be.null;
            error.should.match(RegExp(test.expect));
            done();
          });
        });
      });
    });

    after("Set SERVERLESS_FEEDBACKTABLE feedbacktable", done => {
      process.env.SERVERLESS_FEEDBACKTABLE = "feedbacktable";
      done();
    });
  });
});

redpajama_set_name: RedPajamaGithub