In this document, we will create a sample phonebook application based on ASP.NET Zero step by step. After all steps, we will have a multi-tenant, localized, authorized, configurable, testable... appliaction.
We're creating and downloading the solution named "Acme.PhoneBook" as described in Getting Started document. After opening solution in Visual Studio, we see an NLayered solution that consists of six projects:
Also, run database migrations, create the database and login to the application as described in getting started document. After all completed and logged in to the application, we see a dashboard as shown below:
We will make our application single-tenant (we will convert it to multi-tenant later). So, we open PhoneBookCoreModule class and disable multi-tenancy as shown below:
[DependsOn(typeof(AbpZeroCoreModule))]
public class PhoneBookCoreModule : AbpModule
{
public override void PreInitialize()
{
//Enable this line to create a multi-tenant application.
//Configuration.MultiTenancy.IsEnabled = true;
}
}
Do not skip to switch default application to the MPA version (click "See Demo for Multi-Page Application version with ASP.NET MVC and JQuery").
Let's begin from UI and create a new page named "Phone book".
AppNavigationProvider class defines menus in the application. When we change this class, menus are automatically changed. Open this class and create new menu item as shown below.
.AddItem(new MenuItemDefinition(
PageNames.App.Tenant.PhoneBook,
L("PhoneBook"),
url: "tenant.phonebook",
icon: "glyphicon glyphicon-book"
)
)
Every menu item must have a unique name to identify this menu item. Menu names are defined in PageNames class as constants. We add a new constant: "PhoneBook".
A menu item should also have a localizable shown name. It's used to display menu item on the page. L("PhoneBook") is localized name of our new menu. L method is a helper method gets a localization key and simply returns a LocalizableString object (see AppNavigationProvider class).
Localization strings are defined in XML files in .Core project as shown below:
Open PhoneBook.xml (the default, English localization dictionary) and add the following line:
<text name="PhoneBook" value="Phone book" />
If we don't define "PhoneBook"s value for other localization dictionaries, default value is shown in all languages. We can define it also for Turkish in PhoneBook-tr.xml file:
<text name="PhoneBook" value="Telefon rehberi" />
url can be a URL or AngularJs route (state in angular ui-router used in ASP.NET Zero) that will be activated when we click the menu item. We will define this route below.
Lastly, icon is the shown menu icon for new menu item. It can be a css class. We can use Glyphicon, Font-Awesome or another css font library here.
See navigation document for more information on menu definitions.
Angular routes are defined in app.js. We're adding a new route definition as shown below:
$stateProvider.state('tenant.phonebook', {
url: '/phonebook',
templateUrl: '~/App/tenant/views/phonebook/index.cshtml'
});
'tenant.phonebook' is the unique name of this state (route). url is the mapped URL to this route and templateUrl is the view path for this route.
Note that 'tenant.phonebook' is a second level state (child of 'tenant' abstract state). See Angular-UI's route document for more information on defining states. But, in most cases, you can define it easily by taking existing routes as reference.
The last step to see our new page is to create an Angularjs view and controller for it:
We can use empty controller and view located under common/views/_empty folder to simplify creating a new view.
Creating an empty Controller file, index.js under App/tenant/views/phonebook folder:
(function() {
appModule.controller('tenant.views.phonebook.index', [
'$scope',
function ($scope) {
var vm = this;
$scope.$on('$viewContentLoaded', function () {
Metronic.initAjax();
});
//...
}
]);
})();
This is the minimum controller definition that creates a controller named 'tenant.views.phonebook.index' and triggers Metronic's init method for this page. Controller name is completely arbitrary. You can set any string. We use this naming as convention and it's adviced to follow this convention when developing applications based on ASP.NET Zero.
Creating an empty view, index.cshtml under App/tenant/views/phonebook folder:

@L("PhoneBook")

PHONE BOOK CONTENT COMES HERE!

We can use .cshtml (razor) files as views (thanks to ABP framework). That makes easy localization, conditionally creating some part of the view (based on some user permissions for example) and so on. Don't confuse about all these html structure. You can simple copy empty view from common/views/_empty folder .
Now, it's time to run application and see the new phone book page:
Menu item display name and page title are localized. Try to change UI language to see difference.
We define entities in .Core (domain) project. We can define a Person entity (mapped to PbPersons table in database) to represent a person in phone book as shown below:
[Table("PbPersons")]
public class Person : FullAuditedEntity
{
public const int MaxNameLength = 32;
public const int MaxSurnameLength = 32;
public const int MaxEmailAddressLength = 255;
[Required]
[MaxLength(MaxNameLength)]
public virtual string Name { get; set; }
[Required]
[MaxLength(MaxSurnameLength)]
public virtual string Surname { get; set; }
[MaxLength(MaxEmailAddressLength)]
public virtual string EmailAddress { get; set; }
}
Person's primary key type is int (as default). It inherits FullAuditedEntity that contains creation, modification and deletion audit properties. It's also soft-delete. When we delete a person, it's not deleted by database but marked as deleted (see entity and data filters documentations for more information). We created consts for MaxLength properties. This is a good practice since we will use same values later.
We add a DbSet property for Person entity to PhoneBookDbContext class defined in .EntityFramework project.
public class PhoneBookDbContext : AbpZeroDbContext<Tenant, Role, User>
{
public virtual IDbSet<Person> Persons { get; set; }
//...other entities
public PhoneBookDbContext()
: base("Default")
{
}
//...other codes
}
We use EntityFramework Code-First migrations to migrate database schema. Since we added Person entitiy, our DbContext model is changed. So, we should create a new migration to create the new table in the database.
After opening Package Manager Console and selecting .EntityFramework as default project, we write the following command:
This command will add a migration class named "Added_Persons_Table" as shown below:
public partial class Added_Persons_Table : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.PbPersons",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(nullable: false, maxLength: 32),
Surname = c.String(nullable: false, maxLength: 32),
EmailAddress = c.String(maxLength: 255),
IsDeleted = c.Boolean(nullable: false),
DeleterUserId = c.Long(),
DeletionTime = c.DateTime(),
LastModificationTime = c.DateTime(),
LastModifierUserId = c.Long(),
CreationTime = c.DateTime(nullable: false),
CreatorUserId = c.Long(),
},
annotations: new Dictionary<string, object>
{
{ "DynamicFilter_Person_SoftDelete", "EntityFramework.DynamicFilters.DynamicFilterDefinition" },
})
.PrimaryKey(t => t.Id);
}
public override void Down()
{
DropTable("dbo.PbPersons",
removedAnnotations: new Dictionary<string, object>
{
{ "DynamicFilter_Person_SoftDelete", "EntityFramework.DynamicFilters.DynamicFilterDefinition" },
});
}
}
We don't have to know so much about format and rules of this file. But, it's suggested to have a basic understanding of migrations. In the same Package Manager Console, we write "Update-Database" command in order to apply the new migration to database. After updating, we can see that PbPersons table is added to database.
But this new table is empty. We can use EntityFramework's Seed method to add some initial data to database. In ASP.NET Zero, there are some classes to fill initial data for users and settings:
So, we can add a seperated class to fill some people to database as shown below:
public class InitialPeopleCreator
{
private readonly PhoneBookDbContext _context;
public InitialPeopleCreator(PhoneBookDbContext context)
{
_context = context;
}
public void Create()
{
var douglas = _context.Persons.FirstOrDefault(p => p.EmailAddress == "douglas.adams@fortytwo.com");
if (douglas == null)
{
_context.Persons.Add(
new Person
{
Name = "Douglas",
Surname = "Adams",
EmailAddress =<EMAIL_ADDRESS>});
}
var asimov = _context.Persons.FirstOrDefault(p => p.EmailAddress == "isaac.asimov@foundation.org");
if (asimov == null)
{
_context.Persons.Add(
new Person
{
Name = "Isaac",
Surname = "Asimov",
EmailAddress =<EMAIL_ADDRESS>});
}
}
}
These type of default data is good since we can also use these data in unit tests. Surely, we should be careful about seed data since this code will always be executed after each Update-Database command (See EntityFramework documentations to know more about seed data). This class is created and called in DefaultTenantBuilder class, and it's called from EntityFramework's Configuration class. This is not so important, just for a good code organization (see source codes).
We execute Update-Database command again. This command runs seed and adds two people to PbPersons table:
An Application Service is used from client (presentation layer) to perform operations (use cases) in the application.
Application services are located in .Application project. We create first application service to get people from server. We're creating an interface to define the person application service:
public interface IPersonAppService : IApplicationService
{
ListResultDto<PersonListDto> GetPeople(GetPeopleInput input);
}
An application service method gets/returns DTOs. ListResultDto is a pre-build helper DTO to return a list of another DTO. GetPeopleInput is a DTO to pass request parameters to GetPeople method. So, GetPeopleIntput and PersonListDto are defined as shown below:
public class GetPeopleInput
{
public string Filter { get; set; }
}
[AutoMapFrom(typeof(Person))]
public class PersonListDto : FullAuditedEntityDto
{
public string Name { get; set; }
public string Surname { get; set; }
public string EmailAddress { get; set; }
}
AutoMapFrom attribute is used to configure
AutoMapper to create mapping from
Person to PersonListDto. FullAuditedEntityDto used to inherit audit properties
automatically. See
application service and
DTO documentations for more information.
After defining interface, we can implement it as shown below:
public class PersonAppService : PhoneBookAppServiceBase, IPersonAppService
{
private readonly IRepository<Person> _personRepository;
public PersonAppService(IRepository<Person> personRepository)
{
_personRepository = personRepository;
}
public ListResultDto<PersonListDto> GetPeople(GetPeopleInput input)
{
var persons = _personRepository
.GetAll()
.WhereIf(
!input.Filter.IsNullOrEmpty(),
p => p.Name.Contains(input.Filter) ||
p.Surname.Contains(input.Filter) ||
p.EmailAddress.Contains(input.Filter)
)
.OrderBy(p => p.Name)
.ThenBy(p => p.Surname)
.ToList();
return new ListResultDto<PersonListDto>(persons.MapTo<List<PersonListDto>>());
}
}
We're injecting person repository (it's automatically created by ABP) and using it to filter and get people from database.
WhereIf is an extension method here (defined in Abp.Linq.Extensions namespace). It performs Where condition, only if filter is not null or empty. IsNullOrEmpty is also an extension method (defined in Abp.Extensions namespace). ABP has many similar shortcut extension methods. MapTo method automatically converts list of Person entities to list of PersonListDto entities using AutoMapper library.
We don't manually open database connection or start/commit transactions manually. It's automatically done with ABP framework's Unit Of Work system. See UOW documentation for more.
We don't handle exceptions manually (using a try-catch block). Because ABP framework automatically handles all exceptions on the web layer and returns appropriate error messages to the client. It then handles errors on the client and shows needed error information to the user. See exception handling document for more.
You can skip this section if you don't interest in automated testing.
By writing unit test, we can test PersonAppService.GetPeople method without creating a user interface that calls it and shows people on the screen.
We write unit test in .Tests project in the solution. Let's create first test to verify getting people without any filter:
public class PersonAppService_Tests : AppTestBase
{
private readonly IPersonAppService _personAppService;
public PersonAppService_Tests()
{
_personAppService = Resolve<IPersonAppService>();
}
[Fact]
public void Should_Get_All_People_Without_Any_Filter()
{
//Act
var persons = _personAppService.GetPeople(new GetPeopleInput());
//Assert
persons.Items.Count.ShouldBe(2);
}
}
We derived test class from AppTestBase. AppTestBase class initializes all system, creates an in-memory fake database, seeds initial data (that we created before) to database and logins to application as admin. So, this is actually an integration test since it tests all server-side codes from entitiy framework mapping to application services, validation and authorization.
In constructor, we get (resolve) an IPersonAppService from dependency injection container. It creates the PersonAppService class with all dependencies. Then we can use it in test methods.
Since we're using xUnit, we add Fact attribute to each test method. In the test method, we called GetPeople method and checked if there are two people in the returned list as we know that there were 2 people in initial database.
Let's run the all unit tests in Test Explorer and see if it works:
As you see, it worked successfully. Now, we know that PersonAppService works properly without any filter. Let's add a new unit test to get filtered people:
[Fact]
public void Should_Get_People_With_Filter()
{
//Act
var persons = _personAppService.GetPeople(
new GetPeopleInput
{
Filter = "adams"
});
//Assert
persons.Items.Count.ShouldBe(1);
persons.Items[0].Name.ShouldBe("Douglas");
persons.Items[0].Surname.ShouldBe("Adams");
}
Again, since we know initial database, we can check returned results easily. Here, initial test data is important. When we change initial data, our test may fail even if our services are correct. So, it's better to write unit tests independed of initial data as much as possible. We could check incoming data to see if every people contains "adams" in his/her name, surname or email. Thus, if we add new people to initial data, our tests remain working.
There are many techniques on unit testing, I kept it simple here. But ASP.NET Zero template makes very easy to write unit and integration tests by base classes and pre-build test codes.
Now, lets run and login to the application again, open Chrome Developer Console (or similar tools in other browsers) and write the following command:
This command performs an AJAX call to PersonAppService.GetPeople method. We can see the request if we open Network tab:
As we see, an AJAX request made and people are got successfully.
So, how this happen? How we could call to a C# class method (notice that it's not an MVC Controller or Web API Controller, just a plain C# class) from javascript like calling a javascript method? This is provided by ASP.NET Boilerplate. See dynamic web api layer documentation for more information. You can always call application services from console to debug or see returned JSON structure.
We can also check Audit Logs to see the request. Open AbpAuditLogs table in PhoneBook database to see the call information:
There are some other fields not shown here. So, we see that User with Id=2 called GetPeople method of the PersonAppService in recorded time with the shown parameters and it' executed in 134 ms.
It's time to open phonebook Angularjs controller and get people to show on the view.
(function() {
appModule.controller('tenant.views.phonebook.index', [
'$scope', 'abp.services.app.person',
function($scope, personService) {
var vm = this;
vm.persons = [];
personService.getPeople({}).then(function(result) {
vm.persons = result.data.items;
});
}
]);
})();
We inject 'abp.services.app.person' as personService parameter (See dynamic web api layer documentation to know how this service is automatically created). Then we call getPeople method and create a success handler to get result of the AJAX request. That's all!
We show people on the page is most basic form. See the changed view below:

...

@L("AllPeople")

{{person.name}} {{person.surname}}

{{person.emailAddress}}

...

We used ng-repeat directive of Angularjs to render the array of people (vm.persons). See the result:
We successfully retrieved list of people from database to the page.
Next step is to create a modal to add a new item to phone book.
We first define CreatePerson method in IPersonAppService interface:
Task CreatePerson(CreatePersonInput input);
Then we create CreatePersonInput DTO that defines parameters of the method:
[AutoMapTo(typeof(Person))]
public class CreatePersonInput
{
[Required]
[MaxLength(Person.MaxNameLength)]
public string Name { get; set; }
[Required]
[MaxLength(Person.MaxSurnameLength)]
public string Surname { get; set; }
[EmailAddress]
[MaxLength(Person.MaxEmailAddressLength)]
public string EmailAddress { get; set; }
}
CreatePersonInput is mapped to Person entity (we will use mapping below). All properties are decorated by data annotation attributes to provide automatic validation. Notice that we use same consts defined in Person entity for MaxLength properties.
Here, the implementation of CreatePerson method:
public async Task CreatePerson(CreatePersonInput input)
{
var person = input.MapTo<Person>();
await _personRepository.InsertAsync(person);
}
A Person entity is created by mapping given input, then inserted to database. We used async/await pattern here. All methods in ASP.NET Zero startup project is async. It's adviced to use async/await wherever possible.
You can skip this section if you don't interest in automated testing.
We can create a unit test method to test CreatePerson method as shown below:
[Fact]
public async Task Should_Create_Person_With_Valid_Arguments()
{
//Act
await _personAppService.CreatePerson(
new CreatePersonInput
{
Name = "John",
Surname = "Nash",
EmailAddress =<EMAIL_ADDRESS>});
//Assert
UsingDbContext(
context =>
{
var john = context.Persons.FirstOrDefault(p => p.EmailAddress == "john.nash@abeautifulmind.com");
john.ShouldNotBe(null);
john.Name.ShouldBe("John");
});
}
Test method also written using async/await pattern since calling method is async. We called CreatePerson method, then checked if given person is in the database. UsingDbContext method is a helper method of AppTestBase class (which we inherited this unit test class from). It's used to easily get a reference to DbContext and use it directly to perform database operations.
This method successfully works since all required fields are supplied. Let's try to create a test for invalid arguments:
[Fact]
public async Task Should_Not_Create_Person_With_Invalid_Arguments()
{
//Act and Assert
await Assert.ThrowsAsync<AbpValidationException>(
async () =>
{
await _personAppService.CreatePerson(
new CreatePersonInput
{
Name = "John"
});
});
}
We did not set Surname property of CreatePersonInput despite of it's required. So, it throws AbpValidationException automatically. Also, we can not send null to CreatePerson method since validation system also checks it. This test calls CreatePerson with invalid arguments and asserts that it thows AbpValidationException. See validation document for more information.
We will create a Angular Bootstrap Ui-Modal to create a new person as shown below:
View code is shown below:
@using Acme.PhoneBook.People

<form name="createPersonForm" role="form" novalidate class="form-validation">

@L("CreateNewPerson")

<input class="form-control" type="text" name="Name" ng-model="vm.person.name" required<EMAIL_ADDRESS>@L("Name")

<input type="text" name="Surname" class="form-control" ng-model="vm.person.surname" required<EMAIL_ADDRESS>@L("Surname")

<input type="email" name="EmailAddress" class="form-control" ng-model="vm.person.emailAddress"<EMAIL_ADDRESS>@L("EmailAddress")

<button ng-disabled="vm.saving" type="button" class="btn btn-default" ng-click="vm.cancel()">@L("Cancel")</button>
<button type="submit" button-busy="vm.saving" busy-text="@L("SavingWithThreeDot")" class="btn btn-primary blue" ng-click="vm.save()" ng-disabled="createPersonForm.$invalid"> @L("Save")</button>

</form>

We have a form with three input (name, surname and email address) validated using Angularjs. We're using Person entity's const values in view to set same maxlength to input controls.
Save button is disabled if the form is invalid. button-busy directive makes buttons disable and animates it while submitting form:
Angularjs controller of this view is shown below:
(function () {
appModule.controller('tenant.views.phonebook.createPersonModal', [
'$scope', '$uibModalInstance', 'abp.services.app.person',
function ($scope, $uibModalInstance, personService) {
var vm = this;
vm.saving = false;
vm.person = {};
vm.save = function () {
vm.saving = true;
personService.createPerson(vm.person).then(function () {
abp.notify.info(app.localize('SavedSuccessfully'));
$uibModalInstance.close();
}).finally(function () {
vm.saving = false;
});
};
vm.cancel = function () {
$uibModalInstance.dismiss();
};
}
]);
})();
Controller is simple. It calls createPerson method of PersonAppService when we click the Save button. vm.saving flag is true during AJAX operation. This value is used on view to disable and make buttons animated. If createPerson success, modal is closed.
We return to phone book view and add a button to open this modal:
<button class="btn btn-primary blue" ng-click="vm.openCreatePersonModal()"> @L("CreateNewPerson")</button>
vm.openCreatePersonModal method is called when we click this button:
(function() {
appModule.controller('tenant.views.phonebook.index', [
'$scope', '$uibModal', 'abp.services.app.person',
function ($scope, $uibModal, personService) {
var vm = this;
vm.persons = [];
function getPeople() {
personService.getPeople({}).then(function (result) {
vm.persons = result.data.items;
});
}
vm.openCreatePersonModal = function () {
var modalInstance = $uibModal.open({
templateUrl: '~/App/tenant/views/phonebook/createPersonModal.cshtml',
controller: 'tenant.views.phonebook.createPersonModal as vm',
backdrop: 'static'
});
modalInstance.result.then(function () {
getPeople();
});
};
getPeople();
}
]);
})();
We open modal using $uibModal service by providing view and controller. We re-load person list (by calling getPeople function) after modal closed.
At this point, anyone can enter phone book page since no authorization defined. We will define two permission:
Go to AppAuthorizationProvider class and add a new permission as shown below:
pages.CreateChildPermission(AppPermissions.Pages_Tenant_PhoneBook, L("PhoneBook"), multiTenancySides: MultiTenancySides.Tenant);
A permission should have a unique name. We define permission names as constant strings in AppPermissions class. It's a simple constant string:
public const string Pages_Tenant_PhoneBook = "Pages.Tenant.PhoneBook";
Unique name of this permission is "Pages.Tenant.PhoneBook". While you can set any string (as long as it's unique), it's suggested this convention. A permission can have a localizable display name: "PhoneBook" here. (see "Adding a New Page" section for more about localization, since it's very similar). Lastly, we set that this is a tenant level permission.
AbpAuthorize attribute can be used as class level or method level to protect an application service or service method from unauthorized users. Since all server side code is located in PersonAppService class, we can declare a class level attribute as shown below:
[AbpAuthorize(AppPermissions.Pages_Tenant_PhoneBook)]
public class PersonAppService : PhoneBookAppServiceBase, IPersonAppService
{
//...
}
Now, let's try to enter Phone Book page by clicking the menu item:
We get an error message. This exception is thrown when any method of PersonAppService is called without needed permission.
This secures the service, but we should also hide the Phone book menu item. It's easy, open AppNavigationProvider and add requiredPermissionName as shown below:
new MenuItemDefinition(
PageNames.App.Tenant.PhoneBook,
L("PhoneBook"),
url: "tenant.phonebook",
icon: "glyphicon glyphicon-book",
requiredPermissionName: AppPermissions.Pages_Tenant_PhoneBook
)
While hiding menu item prevents user to enter the page by clicking it, he can still enter the page by entering the following URL directly to address bar of browsers:
http://localhost:6234/Application#/tenant/phonebook
We should also conditionally define angular routes. Thus, if user has no permission to enter this page, he can not activate the route:
if (abp.auth.hasPermission('Pages.Tenant.PhoneBook')) {
$stateProvider.state('tenant.phonebook', {
url: '/phonebook',
templateUrl: '~/App/tenant/views/phonebook/index.cshtml',
menu: 'PhoneBook'
});
}
We wrapper route definition by an if block that checks related permission. Now, user can not open the page without the permission. He is redirected to default route by Angularjs.
So, how we can enter the page now? Simple, go to Role Management page and edit admin role:
We see that a new permission named "Phone book" added to permissions tab. So, we can check it and save the role. After saving, we need to refresh the whole page to refresh permissions for the current user. We could also grant this permission for a specific user (see development guide document for details about roles and users).
Now, we can enter the Phone book page again.
While a permission for a page is useful and probably needed always, we may need to define additional permissions to perform some specific actions on a page, like creating a new person.
Defining a permission is similar:
var phoneBook = pages.CreateChildPermission(AppPermissions.Pages_Tenant_PhoneBook, L("PhoneBook"), multiTenancySides: MultiTenancySides.Tenant);
phoneBook.CreateChildPermission(AppPermissions.Pages_Tenant_PhoneBook_CreatePerson, L("CreateNewPerson"), multiTenancySides: MultiTenancySides.Tenant);
First permission was defined before. In the second line, we are creating a child permission of first one.
This time, we're declaring AbpAuthorize attribute just for CreatePerson method:
[AbpAuthorize(AppPermissions.Pages_Tenant_PhoneBook_CreatePerson)]
public async Task CreatePerson(CreatePersonInput input)
{
//...
}
If we run the application and try to create a person, we get an authorization error after clicking the save button. But, it's good to completely hide Create New Person button if we don't have the permission. There are a few ways of doing it.
We can implement it in index.cshtml razor view on server side using IsGranted method:
@if (IsGranted(AppPermissions.Pages_Tenant_PhoneBook_CreatePerson))
{
<button class="btn btn-primary blue" ng-click="vm.openCreatePersonModal()"> @L("CreateNewPerson")</button>
}
In this way, the Create New Person does not rendered in server and user can not see this button.
As an alternative, we can check permission on client side. First, we declare a variable in Angularjs controller:
vm.permissions = {
createPerson: abp.auth.hasPermission('Pages.Tenant.PhoneBook.CreatePerson')
};
And then use it in a ng-if directive in view to conditionally render the button:
<button ng-if="vm.permissions.createPerson" class="btn btn-primary blue" ng-click="vm.openCreatePersonModal()"> @L("CreateNewPerson")</button>
To see the button again, we can go to role or user manager and grant related permission as shown below:
As shown above, Create new person permission is a child permission of the Phone book.
See authorization documentation for more information on authorization.
Let's add a delete button in people list as shown below:
We're starting from UI in this case.
We're changing index.cshtml view to add a button (related part is shown here):

{{person.name}} {{person.surname}}
<button ng-if="vm.permissions.deletePerson" ng-click="vm.deletePerson(person)" title="@L("Delete")" class="btn btn-circle btn-icon-only red delete-person" href="javascript:;">

</button>

{{person.emailAddress}}

Surely, we defined 'delete person' permission as like before.
We're using a LESS style here to take button right. Created a file named index.less and added following lines:
#AllPeopleList {
.list-group-item-heading {
button.delete-person {
float: right;
}
}
}
Pre-built bundling configuration automatically includes styles to layout.
Now, creating a deletePerson function in Angularjs controller (that was called from view above):
vm.deletePerson = function (person) {
abp.message.confirm(
app.localize('AreYouSureToDeletePerson', person.name),
function (isConfirmed) {
if (isConfirmed) {
personService.deletePerson({
id: person.id
}).then(function () {
abp.notify.success(app.localize('SuccessfullyDeleted'));
getPeople();
});
}
}
);
};
It first shows a confirmation message when we click the delete button:
If we click Yes, it simply calls deletePerson method of PersonAppService and shows a notification if operation succeed.
Localization string "AreYouSureToDeletePerson" was defined like that:
<text name="AreYouSureToDeletePerson" value="Are you sure to delete person named {0}?" />
So, we can pass a name into localize method. This is similar to C#'s string.Format method.
First, adding a new method definition to IPersonAppService interface as always:
Task DeletePerson(EntityDto input);
EntityDto is a shortcut of ABP if we only get an id value. Implementation (in PersonAppService) is very simple:
[AbpAuthorize(AppPermissions.Pages_Tenant_PhoneBook_DeletePerson)]
public async Task DeletePerson(EntityDto input)
{
await _personRepository.DeleteAsync(input.Id);
}
We also authorized deleting a person as did before for creating a person.
Now, we will implement search functionality of GetPeople method. UI is shown below:
We added a search input to filter people:
<input ng-model="vm.filterText" auto-focus class="form-control" placeholder="@L("SearchWithThreeDot")" type="text">

<button ng-click="vm.getPeople()" class="btn btn-default" type="submit"></button>

and changed title to show people count:

@L("AllPeople") ({{vm.persons.length}})

Lastly, changed getPeople function in controller, to send vm.filterText to server:
vm.getPeople = function() {
personService.getPeople({
filter: vm.filterText
}).then(function (result) {
vm.persons = result.data.items;
});
};
That's all. It works since we already have implemented filtering on server.
Until now, we did not even mention about phone numbers. It's time to extend our domain to support multiple phone numbers for a person.
Let's start by creating a new Entity, Phone in .Core project:
[Table("PbPhones")]
public class Phone : CreationAuditedEntity<long>
{
public const int MaxNumberLength = 16;
[ForeignKey("PersonId")]
public virtual Person Person { get; set; }
public virtual int PersonId { get; set; }
[Required]
public virtual PhoneType Type { get; set; }
[Required]
[MaxLength(MaxNumberLength)]
public virtual string Number { get; set; }
}
Phone entities are stored in PbPhones table. It's primary key is long and inherits creation auditing properties. It has a reference to Person entity which owns the phone number.
We added a Phones collection to the People:
[Table("PbPersons")]
public class Person : FullAuditedEntity
{
//...other properties
public virtual ICollection<Phone> Phones { get; set; }
}
We have a PhoneType enum as shown below:
public enum PhoneType : byte
{
Mobile,
Home,
Business
}
Lastly, we're also adding a DbSet property for Phone to our DbContext:
public virtual IDbSet<Phone> Phones { get; set; }
Our entity model has changed, so we need to add a new migration:
This will create a new code based migration file to create PbPhones table:
public partial class Added_Phone : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.PbPhones",
c => new
{
Id = c.Long(nullable: false, identity: true),
PersonId = c.Int(nullable: false),
Type = c.Byte(nullable: false),
Number = c.String(nullable: false, maxLength: 16),
CreationTime = c.DateTime(nullable: false),
CreatorUserId = c.Long(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.PbPersons", t => t.PersonId, cascadeDelete: true)
.Index(t => t.PersonId);
}
public override void Down()
{
DropForeignKey("dbo.PbPhones", "PersonId", "dbo.PbPersons");
DropIndex("dbo.PbPhones", new[] { "PersonId" });
DropTable("dbo.PbPhones");
}
}
Before updating database, we can go to database seed code and add example phone numbers for example people:
public class InitialPeopleAndPhoneCreator
{
//...
public void Create()
{
var douglas = _context.Persons.FirstOrDefault(p => p.EmailAddress == "douglas.adams@fortytwo.net");
if (douglas == null)
{
_context.Persons.Add(
new Person
{
Name = "Douglas",
Surname = "Adams",
EmailAddress =<EMAIL_ADDRESS>Phones = new List<Phone>
{
new Phone {Type = PhoneType.Home, Number = "1112242"},
new Phone {Type = PhoneType.Mobile, Number = "2223342"}
}
});
}
var asimov = _context.Persons.FirstOrDefault(p => p.EmailAddress == "isaac.asimov@foundation.org");
if (asimov == null)
{
_context.Persons.Add(
new Person
{
Name = "Isaac",
Surname = "Asimov",
EmailAddress =<EMAIL_ADDRESS>Phones = new List<Phone>
{
new Phone {Type = PhoneType.Home, Number = "8889977"}
}
});
}
}
}
We added two phone number to Douglas, one phone number to Isaac. But if we run Update-Database now, phones are not inserted since this seed code checks if people exists, and does not insert if it's already exists. What's solution? Since we haven't deployed yet, we can delete database (or at lease truncate people table) and re-create it. I do it.
Now, we are running Update-Database command in Package Manager Console to re-create database and seed it. You can check database to see PbPhones table and rows.
We're changing PersonAppService.GetPeople method to include phone numbers of people into return value.
First, we're changing PersonListDto to contain a list of phones:
[AutoMapFrom(typeof(Person))]
public class PersonListDto : FullAuditedEntityDto
{
public string Name { get; set; }
public string Surname { get; set; }
public string EmailAddress { get; set; }
public Collection<PhoneInPersonListDto> Phones { get; set; }
}
[AutoMapFrom(typeof(Phone))]
public class PhoneInPersonListDto : CreationAuditedEntityDto<long>
{
public PhoneType Type { get; set; }
public string Number { get; set; }
}
So, added also a DTO to transfer phone numbers and mapped from Phone entity. Now, we can change GetPeople method to get Phones from database:
public ListResultDto<PersonListDto> GetPeople(GetPeopleInput input)
{
var persons = _personRepository
.GetAll()
.Include(p => p.Phones)
.WhereIf(
!input.Filter.IsNullOrEmpty(),
p => p.Name.Contains(input.Filter) ||
p.Surname.Contains(input.Filter) ||
p.EmailAddress.Contains(input.Filter)
)
.OrderBy(p => p.Name)
.ThenBy(p => p.Surname)
.ToList();
return new ListResultDto<PersonListDto>(persons.MapTo<List<PersonListDto>>());
}
We only added Include extension method to the query. Rest of the codes remains same. Furthermore, it would work without adding this, but much slower (since it will lazy load phone numbers for every person seperately).
We are adding two more methods to IPersonAppService interface as shown below:
Task DeletePhone(EntityDto<long> input);
Task<PhoneInPersonListDto> AddPhone(AddPhoneInput input);
We could create a new, seperated IPhoneAppService. It's your choice. But, we can consider Person as an aggregate and add phone related methods here. AddPhoneInput DTO is shown below:
[AutoMapTo(typeof(Phone))]
public class AddPhoneInput
{
[Range(1, int.MaxValue)]
public int PersonId { get; set; }
[Required]
public PhoneType Type { get; set; }
[Required]
[MaxLength(Phone.MaxNumberLength)]
public string Number { get; set; }
}
Now, we can implement these methods:
public async Task DeletePhone(EntityDto<long> input)
{
await _phoneRepository.DeleteAsync(input.Id);
}
public async Task<PhoneInPersonListDto> AddPhone(AddPhoneInput input)
{
var person = _personRepository.Get(input.PersonId);
var phone = input.MapTo<Phone>();
person.Phones.Add(phone);
await CurrentUnitOfWork.SaveChangesAsync();
return phone.MapTo<PhoneInPersonListDto>();
}
DeletePhone method is simple. It only deletes phone with given id.
AddPhone method gets the person from database and add new phone to person.Phones collection. Then is save changes. Saving changes causes inserting new added phone to database and get it's Id. Because, we are returning a DTO that contains newly created phone informations including Id. So, it should be assigned before mapping in the last line. (Notice that; normally it's not needed to call CurrentUnitOfWork.SaveChangesAsync. It's automatically called at the end of the method. We called it in the method since we need to save entity and get it's Id immediately. See UOW document for more.)
There may be different approaches for AddPhone method. You can directly work with a phone repository to insert new phone. They all have different pros and cons. It's your choice.
Final UI is shown below:
When we click the green edit icon for a person, it's row is expanded and all phone numbers are shown. Then we can delete any number by clicking the icon at left. We can add a new phone from the inputs at last line.
Changes in view are shown below:

{{person.name}} {{person.surname}}

<button ng-click="vm.editPerson(person)" title="@L("Edit")" class="btn btn-circle btn-icon-only green">

</button>
<button ng-if="vm.permissions.deletePerson" ng-click="vm.deletePerson(person)" title="@L("Delete")" class="btn btn-circle btn-icon-only red">

</button>

{{person.emailAddress}}

@L("Type")
@L("PhoneNumber")

<button ng-click="vm.deletePhone(phone, person)" class="btn btn-sm btn-default">

</button>

{{vm.getPhoneTypeAsString(phone.type)}}
{{phone.number}}

<button ng-click="vm.addPhone(person.newPhone, person)" class="btn btn-sm green">

</button>

<select name="Type" ng-model="person.newPhone.type">
<option value="0">@L("PhoneType_Mobile")</option>
<option value="1">@L("PhoneType_Home")</option>
<option value="2">@L("PhoneType_Business")</option>
</select>

<input type="text" name="Number" ng-model="person.newPhone.number" />

We added an edit button for each person. Then added a table (shown if this person is being edited) for each person that shows phones of the related person and allows adding a new phone.
Added following codes into the Angularjs controller:
vm.editingPerson = null;
vm.editPerson = function(person) {
if (person == vm.editingPerson) {
vm.editingPerson = null;
} else {
vm.editingPerson = person;
}
};
vm.getPhoneTypeAsString = function(typeAsNumber) {
switch (typeAsNumber) {
case 0:
return app.localize('PhoneType_Mobile');
case 1:
return app.localize('PhoneType_Home');
case 2:
return app.localize('PhoneType_Business');
default:
return '?';
}
};
vm.deletePhone = function(phone, person) {
personService.deletePhone({
id: phone.id
}).then(function() {
abp.notify.success(app.localize('SuccessfullyDeleted'));
person.phones = _.without(person.phones, phone);
});
};
vm.addPhone = function(phone, person) {
if (!phone || !phone.type || !phone.number) {
abp.message.warn('Please select a phone type and enter a number!');
return;
}
phone.personId = person.id;
personService.addPhone(phone)
.then(function(result) {
abp.notify.success(app.localize('SavedSuccessfully'));
person.phones.push(result);
phone.number = '';
});
};
We have built a fully functional application until here. Now, we will see how to convert it to a multi-tenant application easily.
We disabled multi-tenancy at the begginning of this document. Now, re-enabling it in PhoneBookCoreModule class:
Configuration.MultiTenancy.IsEnabled = true;
In a multi-tenant application, a tenant's entities should be isolated by other tenants. For this example project, every tenant should have own phone book with isolated people and phone numbers.
When we implement IMustHaveTenant interface, ABP automatically filters data based on current Tenant, while retrieving entities from database. So, we should declare that Person entity must have a tenant using IMustHaveTenant interface:
public class Person : FullAuditedEntity, IMustHaveTenant
{
public virtual int TenantId { get; set; }
//...other properties
}
We may want to add IMustHaveTenant interface to also Phone entity. This is needed if we directly use phone repository to get phones. In this sample project, it's not needed.
Since entities have changed, we should create a new database migration:
Add-Migration "Implemented_IMustHaveTenant_For_Person"
This command creates a new code-first database migration. The migration class adds an annotation this is needed for automatic filtering. We don't have to know what it is since it's done automatically. And also it adds a TenantId column to PbPersons table as shown below:
AddColumn("dbo.PbPersons", "TenantId", c => c.Int(nullable: false, defaultValue: 1));
I added defaultValue as 1 to AddColumn options. Thus, current People are automatically assigned to default tenant (default tenant's id is 1).
Now, we can update the database again:
Update-Database
It's finished! We can test the application. Run the project, login as host as shown blow:
Since we enabled multi-tenancy, we see a Tenancy name input on login form. When we leave it empty, we login as a host user. Default admin password is 123qwe.
After login, we see the tenant list which only contains a default tenant. We can create a new tenant:
I created a new tenant named trio. Now, tenant list has two tenants:
I can logout and login as trio tenant admin:
After login, we see that phone book is empty:
It's empty because trio tenant has a completely islolated people list. You can add people here, logout and login as different teants (you can login as default tenant for example). You will see that each tenant has an isolated phone book and can not see other's people.
In this document, we built a complete example that covers most parts of the ASP.NET Zero system. We hope that it will help you to build your own application.
You should purchase ASP.NET Zero in order to get source code. After purchasing, you can get the sample project from private Github repository: https://github.com/aspnetzero/aspnet-zero-samples


IMPORTANT NOTICE
Texas Instruments and its
subsidiaries (TI) reserve the right to make changes to their products or to
discontinue any
product or service without
notice, and advise customers to obtain the latest version of relevant
information to verify, before
placing orders, that information
being relied on is current and complete. All products are sold subject to the
terms and
conditions of sale supplied at
the time of order acknowledgment, including those pertaining to warranty,
patent
infringement, and limitation of
liability.
TI warrants performance of its
products to the specifications applicable at the time of sale in accordance
with TIís
standard warranty. Testing and
other quality control techniques are utilized to the extent TI deems necessary
to support
this warranty. Specific testing
of all parameters of each device is not necessarily performed, except those
mandated by
government requirements.
Customers are responsible for
their applications using TI components.
In order to minimize risks
associated with the customerís applications, adequate design and operating
safeguards must be
provided by the customer to
minimize inherent or procedural hazards.
TI assumes no liability for
applications assistance or customer product design. TI does not warrant or
represent that any
license, either express or
implied, is granted under any patent right, copyright, mask work right, or
other intellectual
property right of TI covering or
relating to any combination, machine, or process in which such products or
services might
be or are used. TIís publication
of information regarding any third partyís products or services does not
constitute TIís
approval, license, warranty or
endorsement thereof.
Reproduction of information in TI
data books or data sheets is permissible only if reproduction is without
alteration and is
accompanied by all associated
warranties, conditions, limitations and notices. Representation or reproduction
o f this
information with alteration voids
all warranties provided for an associated TI product or service, is an unfair
and deceptive
business practice, and TI is not
responsible nor liable for any such use.
Resale of TIís products or
services with statements different from or beyond the parameters stated
by TI for that product
or service voids all express and
any implied warranties for the associated TI product or service, is an unfair
and deceptive
business practice, and TI is not
responsible nor liable for any such use.
Also see: Standard Terms and
Conditions of Sale for Semiconductor Products http://www.ti.com/sc/docs/stdterms.htm
Mailing Address:
Texas Instruments
Post Office Box 655303
Dallas, Texas 75265


As part of the cultural portion of DBC this week, I’m going to write about my values. After exploring what values make me happy, I’ve chosen to pick one and write a little about why it matters to me. The specific value I’d like to talk about is achievement. I chose this one because it is really a guiding light in my life. Since graduating college, I’ve been struck by a need for achievement. For some reason I now have a strong desire to make the absolute most of my life (that desire was clearly lacking in college). I think this was the force that guided me into programming so soon after receiving my diploma. Achieving past goals not only brought me immediate happiness, but allows me to look back and re-experience those emotions.
In terms of people asking me for advice, that doesn’t happen very often and I can’t even remember the last time somebody asked me for meaningful advice.
I think my thirst for accomplishment can help me overcome stereotype threat if I ever experience it. That kind of ties into what I talked about last week with just focusing on what you are capable of and blocking the rest of the world out.  As long as I focus on what I want to accomplish day in and day out then I can put all my efforts towards that and in time I can accomplish what I want.


To be determined..
Implemented a real time notification engine for Capital One's Auto Navigator search engine.
Provided academic and social support for incoming freshman to encourage a successful transition to the University of Texas at Austin. Tutored freshman computer science majors’ fundamental skills to succeed in the UTCS program ranging from Linux tutorials to advanced data structures.
Deployed and maintained the company server, including the management of a Windows Domain. Provided technical assistance to coworkers as well as maintained company laptops. Programmed various controllers on the Niagara AX, and Johnson Metasys frameworks on multiple $1M+ jobs. Wrote custom Java based applets for aforementioned controllers.
Conducted research on current and emerging web technologies and issues in support of web development efforts. Provided documentation on start-up, shut down and first level troubleshooting of processes to help desk staff. Assembled and tested electronics on PC boards.
In my free time you can probably find me playing games with my friends or tinkering with electronics. I'm extremely passionate about all things computer hardware, and I especially love connected devices. I also enjoy playing board games, especially Settlers of Catan and Clue.


Click to Continue..!!!
Wouldn't it be nice if you get to learn something new aside of competing on the knowledge you have already gained.
So here we bring a whole new set of Worhshops to bring you parallel to the evolving technology.
3D Printing is the next level of innovation, which is set apart to bridge the gap between different fields of education. This is not a paper printing technology, but a technique to print out ideas and designs into models. One of the greatest inventions of the 21st century is a must in training for all the departments of engineering, architecture, medical, arts etc. marking its entry into the domestic lifestyle. Some bold features and benefits of the workshop are:
==> Being a 100% practical training cum workshop, each participant will be able to print out his design into models, which will be given away as souvenirs at the end.
==> The training includes both on software and hardware parts.
==> Career orientation in the 3D Printing World for the participants.
Being a part of this workshop provides you the power to explore the hidden ideas, will give you the wings to ride the new era of innovations marked by technological evolution and sustainability. The idea is simply to bring out your innovation from paper to reality. Every era is marked by the presence of a new technology which boosts up the life style of the people. 1990s brought mobile technology in the market, 2000 saw the Internet boom and this era will be marked by the 3D Printing Technology, which will be hard to be replaced!! Don’t miss the opportunity to be a part of the next generation, which is all set to stage for the first time in Gujarat.
Participants are required to bring Laptop and Mouse
Click Here For SessionWise Detail...
Internet of things means to connect any small everyday object to internet to make it smart. Eg. Connect you lights with your phone. A kit will be provided between 5 people.
Extra benefits: Certificate from Sense Fit technology.
Duration: 2 days
Price: Rs. 1000
Team : 5 people per kit
Do you love to capture memories in your photographs? Do you fell that you can make your photographs convery your story? This is the workshop for you. Students will learn the photography concepts such as the triangle of exposure and how to use the best of tools to create and edit enchanting images.Also learn advanced photography techniques in this workshop with special emphasis on the unique and intrguing 360 degrees photograpy.
Duration: 1 day (6 hrs)
Price: Rs 400
Structural analysis problem solving using software like -
Midas
Stadpro
Bently etc.
Duration: 2 days (12 hrs)
Strength: 60 students
Price: Rs. 1000
Team: individual
In this workshop, students will be able to create amazing do it yourself projects using the amazing arduino, the students will be provided with a kit between teams to create the projects.
Duration: 2 days
Team: 4 people
The design of tall buildings essentially involves a conceptual design, approximate analysis, preliminary design and optimization, to safely carry gravity and lateral loads. The design criteria are strength, serviceability, stability and human comfort. To satisfy these needs a civil engineer must attain this workshop.
Click Here For SessionWise Detail...
Nowadays Chemical Engineers needs to be aware of Computational Tools to design, analyze and optimize chemical processes. Hence a blend of knowledge of fundamentals of chemical engineering and use of computational tools is very much desired in a Chemical Engineer. This Workshop is aimed to make students aware of various available computational tools and to give hands on.
You all know that 4G is here right!! But are you updated about this new tech. In this tutorial cum workshop you would be introduced to this amazing technology. This tutorial will be of 4-5 hrs.
Duration: 4 hrs
Price: Rs. 50
Team : individual


This list only contains completed projects for this competition. View all projects for this competitions.
- Competition number:
- PLACEHOLDER
- Competition type:
- PLACEHOLDER
- Funding body:
- PLACEHOLDER
- Application deadline:
- 13 May 2019 9:04am
- Innovation sector:
This list only contains applications that have not progressed to project setup.
| Application number | Project title | Lead organisation | Status | |
|---|---|---|---|---|
| 124 | Automated Project Title generator | B.Systems | Not funded | Mark as successful |


>…and it was art memed
It was Inauguration Day at the U.S. Capitol on January 20th and a meme star was born on that day. We all have seen the image and memes following it. I remember being absolutely astonished, smiling at that explosion of creativity. What I recall as an interesting implication of the phenomenon was the response of art related accounts - institutions, critics, artists or general art lovers on social media and specifically on Twitter. As a researcher and artist with precise interest in photography and images online I couldn’t stop wondering: How and why Bernie Sanders went viral within the art community? Many saw the Vermont Senator's attitude arriving and welcomed it with open arms. Bernie Sanders – knit mittens included - appeared in a multitude of famous scenes and masterpieces from Joseph Kosuth to George Seurat, from Edward Hopper to a Byzantine manuscript. This collectively created piece of information - the memetic media - circulating all over the Internet – starting from social media – offers great space for reflection on how the dynamics of the visual web work and evolve.
Was it the pose and that attitude, that ‘not much impressed’ aura which made an apparently innocuous image going viral? A study made by a group of researchers from different universities – University College London, Max Planck Institute for Informatics, Boston and Binghamton Universities – titled Dissecting the Meme Magic: Understanding Indicators of Virality in Image Memes can help us understand the magic behind the making of mega-meme. The study explains which visual elements are more likely to get your meme going viral. Training machine learning models to distinguish between image memes likely to go viral and those which are not, this research-led study based its sets on three different dimensions: composition, subject and target audience. Well, let’s start with Bernie flexibility in fitting in any compositions with that folding chair. The sitting pose has been extremely versatile in fitting the various art scenes. Moving then to the subject, whether the main focus is on a character that shows a peculiar facial expression or pose, the chances of virality are higher. Usually, close-ups are more likely to work as images with strong personality – and Bernie's got personality -. Last but not least the target audience connected to the clear and direct visuality of the memes, easy to understand, share and reproduce.
The aim of the study was to understand if memes obey to the same rules as other visual artworks in the way they capture visual attention. Knowing that the realm of social media sets its own rules and specifics for what concerns visuality and images, I found interesting seeing the participation, production and sharing of the - now - iconic image. Another interesting reflection upon this subject comes from Ryan M. Milner in The World Made Meme: public conversations and participatory media. Milner reflects on the formal and social dimension of memetic media of shaping public conversation outlining five basic logics that structure them: multimodality, reappropriation, resonance, collectivism, and spread. The collective reappropriation of Bernie image becoming art meme has resonated largely with the help of major art institutions sharing the newly created art-memes. Offering the familiar and the foreign in an unexpected intertwine interaction, Bernie memes combined a certain ‘non impressed attitude’ to an ethereal and classic scenario. The art community has caught a glimpse of fun in them and just went for it. Nonetheless, the fast spreading of them produced a domino effect that culminates in what you can see here as a great gallery of Bernie’s art memes.
It’s a cultural dialect
writes Nick Douglas in his It’s supposed to Look Shit: The Internet Ugly Aesthetic
referencing Wallace (2001) and explaining his 'internet ugly' aesthetic as an unnamed style running through memetic contents.
This style embodies core values of many online creators and communities [...] glorifying the amateur and validating the unglamorous
.
It comes as no surprise that most of these memes have that kind of polish look and high-end results – some of them have indeed that rushed poor resolution
and unfinished Photoshop touch - it’s the art community at the end of the day.
If that all has enabled the spreading of some great art and performances in a more fun and accessible way than usually used on Twitter; I could not agree more!


UW 2019
I am a transfer student that began Fall quarter 2018. I am overdue for getting a degree.
Communication VS. International Studies
I was admitted as a Comm. student but I'm taking JSIS classes so I can work internationally.
What's Next?
I'm building a school bus and plan to travel from Northern California to Argentina after graduation.


{% extends "layout.html" %} {% block title %}
Daily Average:
Monthly Total:
Work-Life Balance Status:
Yearly Total:


IFM Glass and Aluminium is a private company that installs aluminium doors and windows for houses, offices, restuarants and more. Our services are there to ensure that there is improvement at your home, workplace or any other places that need our touch.
More
Our business is simple. We do any aluminum work, replacement, repairs that suits your vision and style. We target people that are constructing new buildings or renovations such as Houses, Office Spaces, Shops, Restuarants, etc... To install for them Aluminium glass doors and windows. We also handle repair/replace damaged or broken windows for people that already have these utilities.
More
The best part of our business is that our services are extremely affordable and yet still highly competitive. We ensure that our clients are satisfied at all times and that has been our trademark thus far. Elegance and style is what we do best. Should you require any of our services, don't hesitate to enquire below.
More
Are you interested in working with us? Or perhaps you are curious about how we work?
We have a contact form below that you can fill up and simply send through your enquiry.
remove
Just click the button below and follow the instructions that follow and we will get back to you as soon as possible.
Enquire
Alternatively, you can give us a call on the contact details provided below.
remove
You can also follow us on social media to keep up with our latest updates.


These exercises are part of the asynchronous component of this course. Material is taught and demonstrated, but at times you are asked to complete one of the exercises to help you master the new concepts.In the repository you are using for this course, look inside the exercises source folder, and you will see assignments organized by name. Before continuing on to the next portion of the asynchronous material, spend some time on the exercise. When you are finished, commit your code so that credit for the exercise can be given.
It is not so important that you get the exercise exactly right. It is important to work through it as best you can before you look at the solution or continue with other work in this module.
Before starting this exercise:
Be sure to update your repository before beginning this assignment, so that you receive any code you need.
After completing this exercise:
Commit any files you have changed so that you receive credit for your work!
Before starting this exercise:
Be sure to update your repository before beginning this assignment, so that you receive any code you need.
Here, assume the regular expression is simply " ", so that the input String is split into words.
Think about the string you want to appear between the copies, so that it appears the strings were concontenated together as before.
After completing this exercise:
Commit any files you have changed so that you receive credit for your work!


lxappearance - GTK+ theme switcher
This manual page documents briefly the lxappearance command.
lxappearance is a program to change GTK+ themes, icon themes, and fonts used by applications. It is a feature-rich GTK+ theme switcher.
This manual page was written by paulliu<EMAIL_ADDRESS>for the Debian system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 any later version published by the Free Software Foundation.
On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL.
The source code of this manual page should be in .sgml format. It is better not to modify the .1 file directly.
Ying-Chun Liu
Author.
Copyright © 2008 paulliu


Video: Chase Young Ties Ohio State Sack Record In Return vs. Penn State
by Andrew HolleranChase Young is back for Ohio State today after serving a two-game suspension for taking an improper loan at the end of the 2018 season. This is not good news for Penn State.
The best defensive player in college football is already making a big impact. Young pressured Penn State quarterback Sean Clifford on the Nittany Lions’ first drive. On PSU’s second drive of the game, he made history.
Young has tied Ohio State’s single-season sack record of 14 with a sack in the first quarter.
The future top NFL Draft pick has tied Vernon Gholston’s record. He’ll probably break it later in the game.
Good luck blocking him the rest of the game, Penn State.
Ohio State is leading the Nittany Lions, 7-0, early in the game.
It’s being televised on FOX.


Available Reports
Many of these reports can be customized...for example, open the $50 member equity report, then change the number 50 to any number.
| ' ' | ' ' | ' %}
{{ categ.name }}
| ' '' '
{% extends "base.html" %} {% block content %}
Many of these reports can be customized...for example, open the $50 member equity report, then change the number 50 to any number.
| ' ' | ' ' | ' %}
{{ categ.name }}
| ' '' '


{{article.description | truncate(120)}} read more
Some of the Popular sources include
To view a comprehensive sources list click here
To view local kenyan news that is trending internationally
{% endblock %}


Here are the classes, structs, unions and interfaces with brief descriptions:
[detail level 12]
| ▼NUtilityStructs | |
| CEdgeProperty | This struct contains the edge type info for Tarjan's SCC Algorithm |
| CStorageItems | This struct is used to store all of the output information of algorithms for later use |
| CTimer | This class is used to measure the execution time of a executed function with the same scope |
| CVertexProperty | This struct contains the vertex index info that are used by all of the algorithms |
| CAnalyzer | This class is mainly responsible for the experiment functionality. It also provides the wrapped experiment methods |
| CApplication | This class will contain the main functionalities of the application |
| CGraphComponent | This class is used to read graphs from the file and import them to the Boost Graph objects |
| CNuutila | This class contains the implementations of algorithms from the Nuutila's Paper |
| CPearce | This class contains the implementation of algorithms from the Pearce's paper |
| CSession | This struct is used to contain information about the last generated graph directive and the experiment result for users |
| CTarjan | This class contains the implementation of algorithms from the Tarjan's paper |
| CVisualize | This class is used to visualize the information that are gathered from the algorithms |


E-library
Register a new book
Navbar Link
menu
Title of the book
Author
Name
Surname
Publisher
Publishing House
Year of publication
Number of pages
Option 1
Option 2
Option 3
UDC
Book description
Add photo books
Submit the book to the library
send


--- layout: post title: '30 Days in April: Day 26' date: 2009-04-26 22:33:47.000000000 -07:00 type: post published: true status: publish categories: - 30 Days in April tags: - 30 days - blah blah blah - cameraphone - photo meta: _publicize_pending: '1' _edit_last: '6192' aktt_tweeted: '1' original_post_id: '285' _wp_old_slug: '285' author: login: falsefridays email<EMAIL_ADDRESS>display_name: Jim Withington first_name: '' last_name: '' ---
A while back, one of my friends (can't remember who) told me that they felt I took really great cell phone photos. Now, one could take that as more of a "wow, this fast food hamburger tastes great!" kind of compliment, but I decided not to do that.
I've been pretty enamored of how the photos have been turning out with my Palm Centro, especially the arrows one from a few days ago. Mind you, I don't do any digital retouching at all.
I have always been fascinated with making do with the at supplies you have at hand. When I take cell phone photo and use it as my artwork for the day, I really did take the photo thinking, "this might be my art for the day." But digital photos are also so immediate that it always feels like cheating to me. Especially camera phones. I don't know why. I wouldn’t say that Girl Talk cheats by making collages of songs, or that Photoshop artists aren't making art.
At any rate, it's sleeping time. Big day at work tomorrow.


Band Pass Filter bank and its application to voice sound analysis.
Processing band pass filters of which center frequency is from 2000Hz to 4500Hz step by 5Hz and shows gray scale image as output.
python3 main1.py -w wav-file-name(mono,16bit) -f frame-number -r result_figure
There are 5 arguments.
-w specify input wav filename (mono,16bit)
-f specify the frame number to analyze. if negative value, all frames (whole length) are analyzed.
-r specify the directory name to save result image.
--en add this option to save result image instead of display.
--leak add this option to see spectrum leak caused by the envelop. (not available with --en)
Computed BPF bank output data will be save in BPF_out.
examples: all frames (whole length) analysis
vowel /i/ : python3 main1.py -w wav/i_1-16k.wav -f -1 -r result_i
fricative voice /si/ : python3 main1.py -w wav/si_1-16k.wav -f -1 -r result_si
examples: specified frame analysis
vowel /i/ : python3 main1.py -w wav/i_1-16k.wav -f 2 -r result_i
fricative voice /si/ : python3 main1.py -w wav/si_1-16k.wav -f 8 -r result_si
examples: see spectrum leak caused by the envelop
vowel /i/ : python3 main1.py -w wav/i_1-16k.wav -f 2 --leak
re-sampling wav to 16Khz sampling
cd wav
python3 resample1.py -w wav-file-name(mono,16bit)
Please see subdirectory of Noise-Spectrum-Estimation to estimate noise source condition.
And also, see subdirectory of Vocal-Tube-Estimation to estimate vocal tract condition.
For more information, please see related WEB or
same content in Japanese
MIT


grand pa
parent
child
child out from fam
hola
hola 1
hola 2
hola id
holaa
pl write something
Ali
8
delete
employe-name by employee
employee name:
measure price:
add employee


PetroGreen obtains Palawan wind contract
by Alena Mae S. FloresThe Department of Energy officially awarded to PetroGreen Energy Corp. of the Yuchengco Group a service contract to develop a wind project in San Vicente, Palawan province.
The wind energy service contract, which took effect October 9 and received by PGEC on November 11, grants the company with the rights and responsibilities to harness wind energy and develop and operate the corresponding renewable energy facility in the area.
The proposed project is situated in the municipality of San Vicente, Palawan, approximately 130 kilometers north of Puerto Princesa.
“The eco-tourism growth in San Vicente and adjoining towns, the lack of reliable power supply, and the strong support by the provincial and municipal governments for environment-friendly energy facilities drive our decision to invest in San Vicente, Palawan,” said PGEC deputy chief operating officer Maria Victoria Olivar.
“With the award of the service contract, we will proceed with our feasibility studies to ascertain the commercial viability of the block,” she said.


const ( ProtocolVersionHybi13 = 13 ProtocolVersionHybi = ProtocolVersionHybi13 SupportedProtocolVersion = "13" ContinuationFrame = 0 TextFrame = 1 BinaryFrame = 2 CloseFrame = 8 PingFrame = 9 PongFrame = 10 UnknownFrame = 255 DefaultMaxPayloadBytes = 32 << 20 // 32MB )
var ( ErrBadMaskingKey = &ProtocolError{"bad masking key"} ErrBadPongMessage = &ProtocolError{"bad pong message"} ErrBadClosingStatus = &ProtocolError{"bad closing status"} ErrUnsupportedExtensions = &ProtocolError{"unsupported extensions"} ErrNotImplemented = &ProtocolError{"not implemented"} )
var ( ErrBadProtocolVersion = &ProtocolError{"bad protocol version"} ErrBadScheme = &ProtocolError{"bad scheme"} ErrBadStatus = &ProtocolError{"bad status"} ErrBadUpgrade = &ProtocolError{"missing or bad upgrade"} ErrBadWebSocketOrigin = &ProtocolError{"missing or bad WebSocket-Origin"} ErrBadWebSocketLocation = &ProtocolError{"missing or bad WebSocket-Location"} ErrBadWebSocketProtocol = &ProtocolError{"missing or bad WebSocket-Protocol"} ErrBadWebSocketVersion = &ProtocolError{"missing or bad WebSocket Version"} ErrChallengeResponse = &ProtocolError{"mismatch challenge/response"} ErrBadFrame = &ProtocolError{"bad frame"} ErrBadFrameBoundary = &ProtocolError{"not on frame boundary"} ErrNotWebSocket = &ProtocolError{"not websocket protocol"} ErrBadRequestMethod = &ProtocolError{"bad method"} ErrNotSupported = &ProtocolError{"not supported"} )
ErrFrameTooLarge is returned by Codec's Receive method if payload size exceeds limit set by Conn.MaxPayloadBytes
var ErrFrameTooLarge = errors.New("websocket: frame payload size exceeds limit")
JSON is a codec to send/receive JSON data in a frame from a WebSocket connection.
Trivial usage:
import "websocket" type T struct { Msg string Count int } // receive JSON type T var data T websocket.JSON.Receive(ws, &data) // send JSON type T websocket.JSON.Send(ws, data)
var JSON = Codec{jsonMarshal, jsonUnmarshal}
Message is a codec to send/receive text/binary data in a frame on WebSocket connection. To send/receive text frame, use string type. To send/receive binary frame, use []byte type.
Trivial usage:
import "websocket" // receive text frame var message string websocket.Message.Receive(ws, &message) // send text frame message = "hello" websocket.Message.Send(ws, message) // receive binary frame var data []byte websocket.Message.Receive(ws, &data) // send binary frame data = []byte{0, 1, 2} websocket.Message.Send(ws, data)
var Message = Codec{marshal, unmarshal}
func Origin(config *Config, req *http.Request) (*url.URL, error)
Origin parses the Origin header in req. If the Origin header is not set, it returns nil and nil.
Addr is an implementation of net.Addr for WebSocket.
type Addr struct { *url.URL }
func (addr *Addr) Network() string
Network returns the network type for a WebSocket, "websocket".
Codec represents a symmetric pair of functions that implement a codec.
type Codec struct { Marshal func(v interface{}) (data []byte, payloadType byte, err error) Unmarshal func(data []byte, payloadType byte, v interface{}) (err error) }
func (cd Codec) Receive(ws *Conn, v interface{}) (err error)
Receive receives single frame from ws, unmarshaled by cd.Unmarshal and stores in v. The whole frame payload is read to an in-memory buffer; max size of payload is defined by ws.MaxPayloadBytes. If frame payload size exceeds limit, ErrFrameTooLarge is returned; in this case frame is not read off wire completely. The next call to Receive would read and discard leftover data of previous oversized frame before processing next frame.
func (cd Codec) Send(ws *Conn, v interface{}) (err error)
Send sends v marshaled by cd.Marshal as single frame to ws.
Config is a WebSocket configuration
type Config struct { // A WebSocket server address. Location *url.URL // A Websocket client origin. Origin *url.URL // WebSocket subprotocols. Protocol []string // WebSocket protocol version. Version int // TLS config for secure WebSocket (wss). TlsConfig *tls.Config // Additional header fields to be sent in WebSocket opening handshake. Header http.Header // Dialer used when opening websocket connections. Dialer *net.Dialer // contains filtered or unexported fields }
func NewConfig(server, origin string) (config *Config, err error)
NewConfig creates a new WebSocket config for client connection.
Conn represents a WebSocket connection.
Multiple goroutines may invoke methods on a Conn simultaneously.
type Conn struct { PayloadType byte // MaxPayloadBytes limits the size of frame payload received over Conn // by Codec's Receive method. If zero, DefaultMaxPayloadBytes is used. MaxPayloadBytes int // contains filtered or unexported fields }
func Dial(url_, protocol, origin string) (ws *Conn, err error)
Dial opens a new client connection to a WebSocket.
▹ Example
func DialConfig(config *Config) (ws *Conn, err error)
DialConfig opens a new client connection to a WebSocket with a config.
func NewClient(config *Config, rwc io.ReadWriteCloser) (ws *Conn, err error)
NewClient creates a new WebSocket client connection over rwc.
func (ws *Conn) Close() error
Close implements the io.Closer interface.
func (ws *Conn) Config() *Config
Config returns the WebSocket config.
func (ws *Conn) IsClientConn() bool
IsClientConn reports whether ws is a client-side connection.
func (ws *Conn) IsServerConn() bool
IsServerConn reports whether ws is a server-side connection.
func (ws *Conn) LocalAddr() net.Addr
LocalAddr returns the WebSocket Origin for the connection for client, or the WebSocket location for server.
func (ws *Conn) Read(msg []byte) (n int, err error)
Read implements the io.Reader interface: it reads data of a frame from the WebSocket connection. if msg is not large enough for the frame data, it fills the msg and next Read will read the rest of the frame data. it reads Text frame or Binary frame.
func (ws *Conn) RemoteAddr() net.Addr
RemoteAddr returns the WebSocket location for the connection for client, or the Websocket Origin for server.
func (ws *Conn) Request() *http.Request
Request returns the http request upgraded to the WebSocket. It is nil for client side.
func (ws *Conn) SetDeadline(t time.Time) error
SetDeadline sets the connection's network read & write deadlines.
func (ws *Conn) SetReadDeadline(t time.Time) error
SetReadDeadline sets the connection's network read deadline.
func (ws *Conn) SetWriteDeadline(t time.Time) error
SetWriteDeadline sets the connection's network write deadline.
func (ws *Conn) Write(msg []byte) (n int, err error)
Write implements the io.Writer interface: it writes data as a frame to the WebSocket connection.
DialError is an error that occurs while dialling a websocket server.
type DialError struct { *Config Err error }
func (e *DialError) Error() string
Handler is a simple interface to a WebSocket browser client. It checks if Origin header is valid URL by default. You might want to verify websocket.Conn.Config().Origin in the func. If you use Server instead of Handler, you could call websocket.Origin and check the origin in your Handshake func. So, if you want to accept non-browser clients, which do not send an Origin header, set a Server.Handshake that does not check the origin.
type Handler func(*Conn)
▹ Example
func (h Handler) ServeHTTP(w http.ResponseWriter, req *http.Request)
ServeHTTP implements the http.Handler interface for a WebSocket
ProtocolError represents WebSocket protocol errors.
type ProtocolError struct { ErrorString string }
func (err *ProtocolError) Error() string
Server represents a server of a WebSocket.
type Server struct { // Config is a WebSocket configuration for new WebSocket connection. Config // Handshake is an optional function in WebSocket handshake. // For example, you can check, or don't check Origin header. // Another example, you can select config.Protocol. Handshake func(*Config, *http.Request) error // Handler handles a WebSocket connection. Handler }
func (s Server) ServeHTTP(w http.ResponseWriter, req *http.Request)
ServeHTTP implements the http.Handler interface for a WebSocket


File
New
Open
Save
Save As...


| Home | Trees | Indices | Help |
|
|---|
|
|
Base frame with menu.
Author: Patrick K. O'Brien<EMAIL_ADDRESS>|
|||
|
Frame Frame with standard menu items. |
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Mon Nov 22 14:59:33 2010 | http://epydoc.sourceforge.net |


PINNED POST
Web User Interface
Cybotranik WUI Web User Interface HTML framework css
The all-in-one, user interface kit. This interface is suitable for use in many programming languages. It allows you to translate HTML code into programming languages, so you can quickly and effectively create web templates. W3 standards compliant, semantic, new and old browser support, clean structure allows for quick application.
You can design sites that are compatible with search engines.cybotranik-wui provides additional information to the browser's accessibility API. It takes advantage of the additional features of the new generation of browsers, and supports browsers such as the older generation (ie IE-8). It provides good looks on mobile devices and provides performance with a single file library.


Home
Portfolio
Resume
Contact
Success!
Thank you for reaching out. I will get back to you soon.
Go Back


[gecode-users] splitting branching in full enumeration and first-fail check
Martin Mann
mmann at informatik.uni-freiburg.de
Sun Jan 27 12:09:02 CET 2013
Dear Gecoders,
I am working on a small problem where the CSP variables are split into
two subsets A and B.
For set A, a full enumeration of all valid assignments is wanted while
for set B a single check for a valid assignment is sufficent.
Some years ago with Gecode 1.3 I wrote my own branching that did the
latter part.
Thus, first normal branch on A followed by pseudo-branching on B. The
latter stopped the subsearch for B after the first solution was found
such that the search in A was continued and so on.
So my question: is there a direct support for such a scheme in Gecode
3.7? Or do I have to find my old branching implementation and make it
ready for the new version? I am crossing fingers you have something
ready.. :/
Thanks for your help,
Martin
--
Dr. Martin Mann, Postdoc assistant
Bioinformatics - Inst. of Computer Science
Albert-Ludwigs-University Freiburg
Tel: ++49-761-203-8254
Fax: ++49-761-203-7462
http://www.bioinf.uni-freiburg.de/~mmann/
More information about the users
mailing list


Line Chart
-
Multiple data series at different start/end times.
-
Controling the min/max of the x-axis/y-axis.
-
Adding a dot to the end of the line. You can add one to the start and control the size (radius).
-
Adding a blur effect to the line. You can control the effect standard deviation.
-
This example also uses cardinal interpolation.
Animate
fast_forward


| Home | Trees | Indices | Help |
|
|---|
|
|
Class encapsulating a PamFax session
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|
Creates an identifier for the current user, which then can be passed to the portal to directly log in the user: https://portal.pamfax.biz/?_id= Be aware that these identifiers are case sensitive. Identifiers with ttl > 0 can only be used once. Keyword arguments: user_ip -- The IP address of the client on which this identifier will be bound to. Using the identfier from a different ip address will fail timetolifeminutes -- Optional a lifetime of this identifier. Defaults to 60 seconds. If <= 0 is given, the identifier does not expire and can be used more then once, but are tied to your current API key and can not be passed to online shop, portal, ... in the url |
Returns all changes in the system that affect the currently logged in user. This could be changes to the user's profile, credit, settings, ... Changes will be deleted after you received them once via this call, so use it wisely ;) |
Terminate the current session. Log out. |
Just keeps a session alive. If there is no activity in a Session for 5 minutes, it will be terminated. You then would need to call Session::VerifyUser again and start a new FaxJob |
Registers listeners for the current session. Any change of the listened types will then be available via Session::ListChanges function Arguments: listener_types -- Array of types to be registered ('faxall','faxsending','faxsucceeded','faxfailed','faxretrying') |
Returns the current user object. Use this if you need to ensure that your locally stored user object is up to date. |
Verifies a user via username/password Arguments: username -- Username of the user or the md5 of user's username. That's what he has entered when he registered password -- The password (or the md5 of the password) that the user entered in the registration process for the given username (case sensitive) |
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Wed Sep 21 21:30:31 2011 | http://epydoc.sourceforge.net |


Please check your internet connection!
Connection may not be available or slow.
Tap here to try again!


Team
Folio
Hello I'm
Omolayo Victor
Full Stack Developer
<EMAIL_ADDRESS>+2348060347977
No. 1, Ocean View Estate, Lagos NG


Juniormusic is a concept to explore democratized social music experiences. Music is an integral part of offices that have chosen to have an open floor layout. There is a need for an easy and efficient way to manage music to make sure everyone’s taste in music is taken care of.
The physical interface and each laptop are connected to the same wifi network, and anyone on the network can use the web app to add to a shared playlist. The physical interface then plays the music through the main audio system.
Final assembly of prototype
Assembling the hardware for the first time
Copyright 2017 Ashwath Anand


Simple file watcher. Monitors changes in files by polling files.
Filewatcher scans filesystem and execute shell commands when files changes.
Usage:
filewatcher [-i interval] "<filename>" "<shell command>"
Where
filename: filename(s) to scan. shell command: shell command to execute when file changes on disk.
Examples:
filewatcher "myfile" "echo 'myfile has changed'" filewathcer -i 2 "*.rb ../src/*.rb" "ruby run_tests.rb"
Options:
--interval, -i <f>: Interval to scan filesystem. Defaults to 0.5 seconds. --version, -v: Print version and exit --help, -h: Show this message
sudo gem install filewatcher
You need ruby and rubygems installed.
Examples:
Watch a list of files and directories:
require 'filewatcher' FileWatcher.new(["lib/", "Rakefile"]).watch do |filename| puts "Updated " + filename end
Print the names of files beeing watched before we begin:
FileWatcher.new(["lib/"],"Watching files:").watch do |filename| puts "Updated " + filename end => Watching files: lib/filewatcher.rb
To check for changes more often than once every second:
FileWatcher.new(["README.rdoc"]).watch(0.5) do |filename| puts "Updated " + filename end
Code inspired by Tom Lieber’s blogg posting: alltom.com/pages/detecting-file-changes-with-ruby
Find method by c00lrguy: snippets.dzone.com/posts/show/5457
Fork the project.
Make your feature addition or bug fix.
Add tests for it. This is important so I don’t break it in a future version unintentionally.
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but
bump version in a commit by itself I can ignore when I pull)
Send me a pull request. Bonus points for topic branches.
Copyright © 2011 Thomas Flemming. See LICENSE for details.
Generated with the Darkfish Rdoc Generator 1.1.6.


Welcome
Welcome to the eTapestry API Help center. We hope you find this site helpful and informative.
Recommendations
If you are implementing the eTapestry API, we strongly recommend you carefully review the information within the Basics page. The eTapestry API can at first glance be complex with many methods, complex types, and errors. This page highlights key information you'll want to know before getting started. It is important you carefully review things to help ensure a smooth implementation.
Contact Us
Please contact us at<EMAIL_ADDRESS>if you have a question, a suggestion, or simply can't find what you are seeking.


--- layout: index title: NeuralArchCon - Publications tagline: tags : [about, info] img : img-mobile : author : Marcin Koculak css: js: keywords: components, demo canonical: --- {% include JB/setup %}
Hobot, J., Skóra, Z., Wierzchoń, M., & Sandberg, K. (2023). Continuous Theta Burst Stimulation to the left anterior medial prefrontal cortex influences metacognitive efficiency. NeuroImage, 272, 119991.
Koprinkova-Hristova, P., & Nedelcheva, S. (2023, May). Simulation Investigations of Pyramidal Cells Layer Effect on Conscious Visual Perception. In Numerical Methods and Applications: 10th International Conference, NMA 2022, Borovets, Bulgaria, August 22–26, 2022, Proceedings (pp. 200-208). Cham: Springer Nature Switzerland.
Andersen, L. M., Vinding, M. C., Sandberg, K., & Overgaard, M. (2022). Task requirements affect the neural correlates of consciousness. European Journal of Neuroscience, 56(10), 5810-5822.
Chen, X., Li, B., Jia, H., Feng, F., Duan, F., Sun, Z., Caiafa, C. F., & Solé-Casals, J. (2022). Graph empirical mode decomposition-based data augmentation applied to gifted children mri analysis. Frontiers in Neuroscience, 16.
Fjaeldstad, A. W., Konieczny, D. T., Fernandes, H., Gaini, L. M., Vejlø, M., & Sandberg, K. (2022). The relationship between individual significance of olfaction and measured olfactory function. Current Research in Behavioral Sciences, 3, 100076.
Furtak, M., Mudrik, L., & Bola, M. (2022). The forest, the trees, or both? Hierarchy and interactions between gist and object processing during perception of real-world scenes. Cognition, 221, 104983.
Jia, H., Sun, Z., Duan, F., Zhang, Y., Caiafa, C. F., & Solé-Casals, J. (2022). Improving pre-movement pattern detection with filter bank selection. Journal of Neural Engineering.
Koculak, M., & Wierzchoń, M. (2022). Consciousness science needs some rest: How to use resting-state paradigm to improve theories and measures of consciousness. Frontiers in Neuroscience, 16, 836758.
Koprinkova, P., & Nedelcheva, S. (2022). Spike timing neural network model of conscious visual perception. BIOMATH, 11(1), 2202258–2202258.
Sandberg, K., Del Pin, S. H., Overgaard, M., & Bibby, B. M. (2022). A window of subliminal perception. Behavioural Brain Research, 426, 113842.
Song, C., Sandberg, K., Rutiku, R., & Kanai, R. (2022). Linking human behaviour to brain structure: further challenges and possible solutions. Nature Reviews Neuroscience, 23(8), 517-518.
Zhang, J., Sun, Z., Duan, F., Shi, L., Zhang, Y., Solé‐Casals, J., & Caiafa, C. F. (2022). Cerebral cortex layer segmentation using diffusion magnetic resonance imaging in vivo with applications to laminar connections and working memory analysis. Human Brain Mapping, hbm.25998.
Dai, Y., Duan, F., Feng, F., Sun, Z., Zhang, Y., Caiafa, C.F., Marti-Puig, P., Solé-Casals, J. (2021). A Fast Approach to Removing Muscle Artifacts for EEG with Signal Serialization Based Ensemble Empirical Mode Decomposition. Entropy 2021, 23, 1170.
Del Pin, S. H., Skóra, Z., Sandberg, K., Overgaard, M., & Wierzchoń, M. (2021). Comparing theories of consciousness: Why it matters and how to do it. Neuroscience of Consciousness, 2021(2), niab019.
Duan, F., Jia, H., Zhang, Z., ... & Solé-Casals, J. (2021). On the robustness of EEG tensor completion methods. Sci. China Technol. Sci., 1869-1900.
Furtak, M., Doradzińska, Ł., Ptashynska, A., Mudrik, L., Nowicka, A., & Bola, M. (2020). Automatic attention capture by threatening, but not by semantically incongruent natural scene images. Cerebral Cortex, 30(7), 4158-4168.
Gott, J., Bovy, L., Peters, E., Tzioridou, S., Meo, S., Demirel, Ç., ... & Dresler, M. (2021). Virtual reality training of lucid dreaming. Philosophical Transactions of the Royal Society B, 376(1817), 20190697.
Hobot, J., Klincewicz, M., Sandberg, K., and Wierzchoń, M. (2021). Causal Inferences in Repetitive Transcranial Magnetic Stimulation Research: Challenges and Perspectives. Front. Hum. Neurosci. 14:586448.
Hui, S. C. N., Mikkelsen, M., Zöllner, H. J., Ahluwalia, V., Alcauter, S., Baltusis, L., Barany, D. A., Barlow, L. R., Becker, R., Berman, J. I., Berrington, A., Bhattacharyya, P. K., Blicher, J. U., Bogner, W., Brown, M. S., Calhoun, V. D., Castillo, R., Cecil, K. M., Choi, Y. B., … Edden, R. A. E. (2021). Frequency drift in MR spectroscopy at 3T. NeuroImage, 241, 118430.
Kristensen, D. G., & Sandberg, K. (2021). Population receptive fields of human primary visual cortex organised as DC-balanced bandpass filters. Scientific Reports, 11(1), 22423.
Li, B., Zhang, Z., Duan, F., Yang, Z., Zhao, Q., Sun, Z., & Solé-Casals, J. (2021). Component-mixing Strategy: A Decomposition-based Data Augmentation Algorithm for Motor Imagery Signals. Neurocomputing.
Lopez-de-Ipina, K., Solé-Casals, J., Sanchez-Mendez, I., Romero-Garcia, R., Fernandez, E., Requejo, C., ... & Suckling, J. (2021). Analysis of Fine Motor Skills in Essential Tremor: combining Neuroimaging and Handwriting biomarkers for early management. Front. Hum. Neurosci. 15:648573.
Overgaard, M., & Sandberg, K. (2021). The Perceptual Awareness Scale—Recent controversies and debates. Neuroscience of Consciousness, 2021(1), niab044.
Tarailis, P., Šimkutė, D., Koenig, T., & Griškova-Bulanova, I. (2021). Relationship between Spatiotemporal Dynamics of the Brain at Rest and Self-Reported Spontaneous Thoughts: An EEG Microstate Approach. Journal of Personalized Medicine, 11(11), 1216. MDPI AG.
Zhang, J., Feng, F., Han, T., Duan, F., Sun, Z., Caiafa, F. C., & Solé-Casals, J. (2021). A hybrid method to select morphometric features using tensor completion and F-score rank for gifted children identification. Science China Technological Sciences, 1-9.
Bajada, C. J., Campos, L. Q. C., Caspers, S., Muscat, R., Parker, G. J., Ralph, M. A. L., ... & Trujillo-Barreto, N. J. (2020). A tutorial and tool for exploring feature similarity gradients with MRI data. NeuroImage, 117140.
Caiafa, C. F., Solé-Casals, J., Marti-Puig, P., Zhe, S., & Tanaka, T. (2020). Decomposition Methods for Machine Learning with Small, Incomplete or Noisy Datasets. Applied Sciences, 10(23), 8481.
Duan, F., Huang, Z., Sun, Z., Zhang, Y., Zhao, Q., Cichocki, A., ... & Solé-Casals, J. (2020). Topological Network Analysis of Early Alzheimer’s Disease Based on Resting-State EEG. IEEE Transactions on Neural Systems and Rehabilitation Engineering.
Del Pin, S. H., Skóra, Z., Sandberg, K., Overgaard, M., & Wierzchoń, M. (2020). Comparing theories of consciousness: Object position, not probe modality, reliably influences experience and accuracy in object recognition tasks. Consciousness and Cognition, 84, 102990.
Filevich, E., Koß, C., and Faivre, N. (2020). Response-Related Signals Increase Confidence But Not Metacognitive Performance. Eneuro, 7(3).
Hobot, J., Koculak, M., Paulewicz, B., Sandberg, K., and Wierzchoń, M. (2020). Transcranial Magnetic Stimulation-Induced Motor Cortex Activity Influences Visual Awareness Judgments. Front. Neurosci. 14:580712.
Griskova-Bulanova, I., Sveistyte, K., & Bjekic, J. (2020). Neuromodulation of gamma-range auditory steady-state responses: a scoping review of brain stimulation studies. Frontiers in Systems Neuroscience, 14.
Kristensen, S. B., Sandberg, K., & Bibby, B. M. (2020). Regression methods for metacognitive sensitivity. Journal of Mathematical Psychology, 94, 102297.
Mazancieux, A., Fleming, S. M., Souchay, C., & Moulin, C. J. (2020). Is there a G factor for metacognition? Correlations in retrospective metacognitive sensitivity across tasks. Journal of Experimental Psychology: General.
Miloserdov, K., Schmidt-Samoa, C., Williams, K., Weinrich, C. A., Kagan, I., Bürk, K., ... & Wilke, M. (2020). Aberrant functional connectivity of resting state networks related to misperceptions and intra-individual variability in Parkinson‘s disease. NeuroImage: Clinical, 25, 102076.
Sun, Z., Li, B., Duan, F., Jia, H., Wang, S., Liu, Y., ... & Solé-Casals, J. (2020). WLnet: towards an approach for robust workload estimation based on shallow neural networks. IEEE Access.
Zhao, X., Solé-Casals, J., Li, B., Huang, Z., Wang, A., Cao, J., ... & Zhao, Q. (2020). Classification of Epileptic IEEG Signals by CNN and Data Augmentation. In ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 926-930). IEEE.
Zhou, H., Davidson, M., Kok, P., McCurdy, L. Y., de Lange, F. P., Lau, H., & Sandberg, K. (2020). Spatiotemporal dynamics of brightness coding in human visual cortex revealed by the temporal context effect. NeuroImage, 205, 116277.
Derda, M., Koculak, M., Windey, B., Gociewicz, K., Wierzchoń, M., Cleeremans, A., & Binder, M. (2019). The role of levels of processing in disentangling the ERP signatures of conscious visual processing. Consciousness and cognition, 73, 102767.
Siedlecka, M., Hobot, J., Skóra, Z., Paulewicz, B., Timmermans, B., & Wierzchoń, M. (2019). Motor response influences perceptual awareness judgements. Consciousness and cognition, 75, 102804.
Wierzchoń, M., Anzulewicz, A., Hobot, J., Paulewicz, B., & Sackur, J. (2019). In search of the optimal measure of awareness: Discrete or continuous? Consciousness and cognition, 75, 102798.


@(user: api.entity.User) @view.views.html.emails.main.plain.main() { Hello @user.getName(), Thank you for registering on Meekbiz. This email is sent to you to confirm that you have indeed register on the site. }