Personal Information

  • Name in Full: LU, Min

  • Birthday: January 16th, 1986

  • Birthplace: Jintan, Jiangsu Province, P.R.China

  • Academic Degree: Ph. D.

  • Job Title: Assistant Professor

  • Affiliation: Faculty of Arts and Science, Kyushu University, Japan

  • E-mail: lu@artsci.kyushu-u.ac.jp

  • Hobby: history, travel, movie, music, video game, …

  • Links: ResearchMap ResearchGate

Career Summary

  • October 2014 ~ November 2014: Guest Researcher, Center for Spatial Information Science, University of Tokyo

  • December 2014 ~ March 2018: Project Researcher, Center for Spatial Information Science, University of Tokyo

  • April 2018 ~ present: Guest Researcher, Center for Spatial Information Science, University of Tokyo

  • May 2018 ~ March 2019: Postdoctoral Researcher, Learning Analytics Center, Faculty of Arts and Science, Kyushu University

  • April 2019 ~ present: Assistant Professor, Faculty of Arts and Science, Kyushu University

Academic Qualification

  • September 2014: Doctor’s degree of Philosophy in Socio-Cultural Environmental Studies, Graduate School of Frontier Science, The University of Tokyo, Japan. Doctoral thesis: “Human-Centered Mapping in Mobile Environment” (Received the Dean’s Award for Outstanding Achievement)

  • July 2011: Master’s degree of Science in Cartography and GIS at Peking University, China. Master’s thesis: “Temporal-GIS Data Model and Implementation Methods Based on Geo-object Evolvement Events”

  • July 2008: Bachelor’s degree of Science in Geographic Information System at Peking University, China. Bachelor’s thesis: “Design and Implementation of Remote Sensing Information Mobile Services Prototype System”

Publications

(For a full list of publications, please visit my page on ResearchMap or ResearchGate)

Main papers

Location-Based Applications Using Analog Maps for Sustainable Local Tourism Information Services
Lu Min, Arikawa Masatoshi, Sugiyama Ayako
CARTOGRAPHICA 53(2) 129-145 2018

User-generated storytelling based on analog maps with local and dynamic georeferencing
Lu Min, Si Ruochen, Arikawa Masatoshi, Kaji Hideki
PROCEEDINGS OF THE 2017 PACIFIC NEIGHBORHOOD CONSORTIUM ANNUAL CONFERENCE AND JOINT MEETINGS (PNC) 134-141 2017

Classes for Creating Location-Based Audio Tour Content: A Case of User-Generated LBS Education to University Students
Lu Min, Arikawa Masatoshi, Okabe Atsuyuki
PROGRESS IN LOCATION-BASED SERVICES 2016 375-398 2017

Classes for Creating Location-Based Audio Tour Content: A Case of User-Generated LBS Education to University Students
Min Lu, Masatoshi Arikawa, Atsuyuki Okabe
Progress in Location-Based Services 2016, LBS 2016, Vienna, Austria, November 14-16, 2016, Selected Papers 375-398 2016

Creating Geo-enabled Hand-drawn Maps: An Experiment of User-generated Mobile Mapping
Min Lu, Masatoshi Arikawa
International Journal of Cartography 1(1) 45-61 2015

Walking on a Guidebook with GPS: A Framework Geo-Enabling Pages with Illustrated Maps in LBS
Min Lu, Masatoshi Arikawa
Principle and Application Progress in Location-Based Services 2014 243-264 2014

Map-Based Storytelling Tool for Real-World Walking Tour
Min Lu, Masatoshi Arikawa
Progress in Location-Based Services 435-451 2013

Location-Based Illustration Mapping Applications and Editing Tools
Min Lu, Masatoshi Arikawa
Cartographica 48(2) 100-112 2013

Modeling Dynamic Networks in Temporal GIS and Realization Methods
Yuefeng Liu, Min Lu, Zhongzhi Yang
Acta Scientiarum Naturalium Universitatis Pekinensis 48(3) 451-458 2012

Awards

2015/03: Dean’s Award for Outstanding Achievement (Graduate School of Frontier Sciences, the University of Tokyo)

个人信息

  • 姓名: 陆 忞

  • 出生日期: 1986年1月16日

  • 出身地: 江苏金坛

  • 学位: 博士

  • 职位: 助教

  • 工作单位: 日本九州大学基干教育院

  • 电子邮件: lu@artsci.kyushu-u.ac.jp

  • 兴趣爱好: 历史, 旅行, 电影, 音乐, 游戏, …

  • 链接: ResearchMap ResearchGate

工作经历

  • 2014年10月 ~ 2014年11月: 东京大学空间信息科学研究中心 客员研究员

  • 2014年12月 ~ 2018年3月: 东京大学空间信息科学研究中心 特任研究员

  • 2018年4月至今: 东京大学空间信息科学研究中心 客员研究员

  • 2018年5月 ~ 2019年3月: 九州大学基干教育院教育分析中心 学术研究员

  • 2019年4月至今: 九州大学基干教育院 助教

学历学位

  • 2014年9月: 博士学位(环境学,东京大学大学院 新领域创成科学研究科 社会文化环境学专攻)论文题目: “Human-Centered Mapping in Mobile Environment” (获研究科长赏)

  • 2011年7月: 硕士学位(理学,北京大学 地球与空间科学学院 地图学与地理信息系统专业)论文题目: “基于地理对象演化事件的时态GIS数据模型及实现方法”

  • 2008年7月: 学士学位(理学,北京大学 地球与空间科学学院 地理信息系统专业)论文题目: “遥感影像移动服务原型的设计与实现”

所属学会

  • 日本地图学会

  • 日本情报处理学会

论文发表

(见英文版CVResearchMap ResearchGate

获奖情况

2015年: 研究科长赏(东京大学新领域创成科学研究科)

個人情報

  • 名前: 陸 忞(るう みん)

  • 生年月日: 1986年1月16日

  • 出身地: 中国江蘇省金壇

  • 学位: 博士

  • 現職: 助教

  • 所属: 九州大学基幹教育院

  • Eメール: lu@artsci.kyushu-u.ac.jp

  • 趣味: 歴史, 旅行, 映画, 音楽, ゲーム, など…

  • リンク: ResearchMap ResearchGate

職歴

  • 2014年10月 ~ 2014年11月: 東京大学 空間情報科学研究センター 客員研究員

  • 2014年12月 ~ 2018年3月: 東京大学 空間情報科学研究センター 特任研究員

  • 2018年4月から: 東京大学 空間情報科学研究センター 客員研究員

  • 2018年5月 ~ 2019年3月: 九州大学 基幹教育院 ラーニングアナリティクスセンター 学術研究員

  • 2019年4月から: 九州大学 基幹教育院 助教

学历学位

  • 2014年9月: 博士(環境学)東京大学大学院 新領域創成科学研究科 社会文化環境学専攻 - 論文タイトル: “Human-Centered Mapping in Mobile Environment(モバイル環境における人間中心マッピング)” (研究科長賞受賞)

  • 2011年7月: 修士(理学)北京大学 地球・空間科学学院 地図学・地理情報システム専攻 - 論文タイトル: “Temporal-GIS Data Model and Implementation Methods Based on Geo-object Evolvement Events”

  • 2008年7月: 学士(理学)北京大学 地球・空間科学学院 地理情報システム・コース - 論文タイトル: “Design and Implementation of Remote Sensing Information Mobile Services Prototype System”

論文リスト

英語版CVあるいはResearchMapResearchGateに参照

受賞歴

2015年: 研究科長賞(東京大学新領域創成科学研究科)

Why we need custom components

Although Ionic Framework has provided us with a lot of components that can meet the most of our needs, we sometimes still have special requirements that can be better realized in our own components.

Create a new component with Ionic CLI

1
$ ionic g component my-comp

The folder of the component will be created at ./src/components/my-comp with my-comp.html, my-comp.scss and my-comp.ts files inside it. The component will have the name of selector as my-comp, and its class name will be MyCompComponent by default.

The component will be added to the file of the Components Module ./src/components/components.module.ts (which will be created automatically if it is the first new component).

Import the component in pages

In the myPage.module.ts file, import the Components module.

1
2
3
4
5
6
7
8
9
10
11
12
...
import { ComponentsModule } from "../../components/components.module";

@NgModule({
...
imports: [
...
ComponentsModule,
...
],
})
...

In the .ts file of the page, import the new component.

1
import { MyCompComponent } from '../../components/my-comp/my-comp';

In the .html file of the page, you can use the tag <my-comp> now in the HTML.

Data binding, updating and event handling

Data input

In my-comp.ts, use the @Input() tag to the properties, so that the properties can be inputted from the page HTML using data binding. get/set can also be used with the Input() tag.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
export class MyCompComponent {
param2;

@Input()
param1;

@Input()
get paramTwo() {
return this.param2;
}
set paramTwo(val) {
this.param2 = val;
// something to do
}
...
}

In the HTML file of the page, the data can be inputed as:

1
<my-comp [param1]="myCompParam1" [paramTwo]="myCompParam2"></my-comp>

Data updating

When the component is initialized, the event OnInit will be triggered. When the data input is updated, the event OnChanges will be triggered. The class MyCompComponent can implement the interface OnInit and OnChanges to deal with the event.

1
2
3
4
5
6
7
8
9
10
11
12
export class MyCompComponent implements OnInit, OnChanges {
...

ngOnInit() {
// do something when init
}

ngOnChanges() {
// do something when changed
}
...
}

The timing of data updating and OnChanges events (IMPORTANT)

As angular only check and compare the value of the data input, the following cases of data updating will NOT trigger the OnChanges event.

  • There is the action of assignment (e.g. myCompParam1 = 1;) but the value of the variable is not changed (myCompParam1 is 1 before the assignment).
  • When the input data is an object, the property changes of the object (which will not change the address of the object) will not trigger OnChanges.

Custom events

Custom events can be defined using @Output tag. Suppose the custom component has a close button, and we want to raise a event closeClicked when it is clicked. In my-comp.html, the click event handler is defined, which will be handled in my-comp.ts. Then, in my-comp.ts, a event will be defined and emitted when handling the click event of the button.

1
2
3
4
<div>
...
<button (click)="closeButtonClickHandler($event)"></button>
</div>

1
2
3
4
5
6
7
8
9
10
11
12
export class MyCompComponent implements OnInit, OnChanges {
...

@Output()
closeClicked = new EventEmitter();

closeButtonClickHandler(event) {
this.closeClicked.emit(event);
}

...
}

Get the parameters of the component in the component class

Sometimes we need to know the components’ position or size in the component class. We can import ElementRef in my-comp.ts to get the parameters.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { ..., ElementRef } from '@angular/core';

export class MyCompComponent implements OnInit, OnChanges {
...

constructor(private element: ElementRef) {

}
...

someFunction() {
var height = this.element.nativeElement.offsetHeight;
var width = this.element.nativeElement.offsetWidth;
var left = this.element.nativeElement.offsetLeft;
var right = this.element.nativeElement.offsetRight;
var parentHeight = this.element.nativeElement.parentElement.offsetHeight;
var parentWidth = this.element.nativeElement.parentElement.offsetWidth;
// do something
}
}

Call the function/method of the component in the page

Sometimes we need to call the function of the component class in the page. We can import ViewChild in myPage.ts and bind the component with the object of the component class using @ViewChild tag.

1
<my-comp #myComp></my-comp>
1
2
3
4
5
6
7
8
9
import { ViewChild } from '@angular/core';

export class MasterPage {
@ViewChild('myComp') myComp: MyCompComponent;
...
aFunction() {
myComp.someFunction();
}
}

后记

好久没有更新了,技术文档笔记还是要及时写及时更新,否则不用太长时间就会遗忘的。以后尽量多写踩坑心得,加油!

0. 关于CocoaPods

参照 CocoaPods Getting Started guide, 安装如下。使用macOS默认自带的Ruby即可安装,不需要任何前置安装。

1
$ sudo gem install cocoapods

1. 使用CocoaPods向单个项目中安装第三方库(Google Maps SDK)

参照 Get Started | Maps SDK for iOS | Google Developers,步骤如下:

  1. 如果还没有Xcode项目(project)则新建一个。
  2. 在项目根目录下新建文件Podfile,用于定义项目中库的依赖关系。
  3. 编辑文件Podfile,加入如下内容并保存:
    1
    2
    3
    4
    5
    source 'https://github.com/CocoaPods/Specs.git'
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
    pod 'GoogleMaps'
    pod 'GooglePlaces'
    end

其中,YOUR_APPLICATION_TARGET_NAME_HERE需要改为Xcode项目中Target的名称。该配置将向Target中加入GoogleMapsGooglePlaces两个库。

  1. 打开terminal,进入项目根目录并运行pod install

    1
    2
    $ cd /path/to/project
    $ pod install
  2. 如无异常信息输出,则安装成功。此时CocoaPods会在项目根目录自动新建工作空间(Workspace)配置文件.xcworkspace。如目录下已存在.xcworkspace文件,则CocoaPods会自动修改它。

  3. 关闭Xcode,双击.xcworkspace(而不是.xcodeproj)打开项目。
  4. 使用新添加的库。

2. 使用CocoaPods向包含多个项目的Workspace中安装第三方库

首先,该Workspace中的目录结构大致示意如下

  • [Workspace root]
    • workspace.xcworkspace
    • [Project1 folder]
      • project1.xcodeproj
      • [AppTarget folder]
    • [Project2 folder]
      • project2.xcodeproj
      • [FrameworkTarget folder]

其中,Project2Project1的依赖,其生成的Framework被Project1的Target所引用。此时我们的需求是向Project2中使用CocoaPods加入第三方库(Google Maps SDK).

尝试一:在Project2中独立安装第三方库(不成功)

即在[Project2 folder]下新建Podfile文件并运行pod install

1
2
3
4
5
source 'https://github.com/CocoaPods/Specs.git'
target 'FrameworkTarget' do
pod 'GoogleMaps'
pod 'GooglePlaces'
end

结果:

  1. 在编写代码时能正常显示新加入的库中的内容
  2. 在workspace中编译TargetApp不通过,提示找不到新加库的头文件
  3. 在workspace中单独编译TargetFramework不通过,提示找不到新加库的头文件
  4. 打开Project2中由CocoaPods自动生成的.xcworkspace文件,单独编译Framework成功。

尝试二:在Workspace中建立Podfile统一安装管理多个项目的第三方库

卸载项目中已安装的CocoaPods库

使用CocoaPods-deintegrate(最好事先备份项目):

1
2
3
$ [sudo] gem install cocoapods-deintegrate
$ cd folder/to/the/project
$ pod deintegrate

如无错误信息输出,卸载成功后,项目目录下残留PodfilePodfile.lock.xcworkspace三个文件,需手动删除。

在Workspace根目录下新建Podfile文件并执行安装

参照:
iOS 如何在一个存在多个project的workspace中引入cocoapods管理第三方类库
iOS 如何在一个已经存在多个project的workspace中引入cocoapods管理第三方类库

新建Podfile如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
platform :ios, '8.0'

workspace 'Workspace'

project 'Project1 folder/project1.xcodeproj'
project 'Project2 folder/project2.xcodeproj'

source 'https://github.com/CocoaPods/Specs.git'
target 'FrameworkTarget' do
project 'Project2 folder/project2.xcodeproj'
pod 'GoogleMaps'
pod 'GooglePlaces'
end

执行pod install安装后,workspace.xcworkspace将被修改。重新打开后可使用新加入的库编写代码。

结果:

  1. 在编写代码时能正常显示新加入的库中的内容
  2. 在workspace中编译TargetApp不通过,提示找不到新加库的头文件
  3. 在workspace中单独编译TargetFramework通过

查找问题并修正

分别查看FrameworkTarget和AppTarget的Build Settings中的Framework Search Paths等设置,发现FrameworkTarget中正确设定了CocoaPods相关的路径值,而在AppTarget中均为空值。将Podfile修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
platform :ios, '8.0'

workspace 'Workspace'

project 'Project1 folder/project1.xcodeproj'
project 'Project2 folder/project2.xcodeproj'

source 'https://github.com/CocoaPods/Specs.git'
target 'FrameworkTarget' do
project 'Project2 folder/project2.xcodeproj'
pod 'GoogleMaps'
pod 'GooglePlaces'
end

target 'AppTarget' do
project 'Project1 folder/project1.xcodeproj'
pod 'GoogleMaps'
pod 'GooglePlaces'
end

结果: 编译、执行通过。

3. 小结

使用CocoaPods在多项目的Workspace中安装管理第三方库时,必须注意项目间的依赖关系和搜索路径的相关配置是否正确。

本文应该并未实现最终解决,因为目前的配置似乎违背了Project2作为Framework可以独立存在的初衷。但Project2独立编译生成的Framework应该仍然可以在其他项目中正常使用(尚未验证)。文中在Project1中直接引用Project2的目的是方便调试。